diff --git a/docs/content/Development/Data-Sync-System/Annotations.md b/docs/content/Development/Data-Sync-System/Annotations.md index 58089a72798..94908f35daf 100644 --- a/docs/content/Development/Data-Sync-System/Annotations.md +++ b/docs/content/Development/Data-Sync-System/Annotations.md @@ -58,32 +58,4 @@ public boolean isWorkingEnabled = true; 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; -} ``` \ No newline at end of file diff --git a/docs/content/Development/Data-Sync-System/Migrating-From-LDLib-SyncData.md b/docs/content/Development/Data-Sync-System/Migrating-From-LDLib-SyncData.md index 5802445b08e..25a1f239797 100644 --- a/docs/content/Development/Data-Sync-System/Migrating-From-LDLib-SyncData.md +++ b/docs/content/Development/Data-Sync-System/Migrating-From-LDLib-SyncData.md @@ -24,4 +24,4 @@ Client sync fields **do not** automatically detect changes. When changing a clie ### Other changes - - `saveCustomPersistedData` & `loadCustomPersistedData` methods: Use `@CustomDataModifier` & `@FieldDataModifier` \ No newline at end of file + - `saveCustomPersistedData` & `loadCustomPersistedData` methods, and serialization of custom data types - See `ValueTransformer` and `ValueTransformers` classes. \ No newline at end of file diff --git a/docs/content/Development/Data-Sync-System/Usage.md b/docs/content/Development/Data-Sync-System/Usage.md index f9c5b13c32c..637c8b8bb13 100644 --- a/docs/content/Development/Data-Sync-System/Usage.md +++ b/docs/content/Development/Data-Sync-System/Usage.md @@ -58,41 +58,46 @@ The following field types are supported by default: ### 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 `ValueTransformer` abstract class defines how a value of type `T` should be serialized. -The `IValueTransformer` interface defines how a value of type `T` should be serialised. +To add support for an additional type, call `ValueTransformers.registerTransformer(Class cls, ValueTransformer transformer)` or `ValueTransformers.registerTransformerSupplier(Class cls, Supplier> func)` +Additionally, fields can be explicitly directed to use a specific value transformer: ```java -public interface IValueTransformer { - - // 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); +/** + * Example from HullMachine.java. This example shows serialization of an AE2 class which may or may not be loaded at runtime. + */ + +@SaveField(nbtKey = "grid_node") +private final Object gridNodeHost; + +private static class GridNodeHostTransformer implements ValueTransformer { + + @Override + public Tag serializeNBT(Object value, TransformerContext context) { + if (GTCEu.Mods.isAE2Loaded() && + (context.currentValue()) instanceof IGridConnectedBlockEntity connectedBlockEntity) { + var compound = new CompoundTag(); + connectedBlockEntity.getMainNode().saveToNBT(compound); + return compound; } - - // 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); + return new CompoundTag(); + } + + @Override + public @Nullable Object deserializeNBT(Tag tag, TransformerContext context) { + if (GTCEu.Mods.isAE2Loaded() && + context.currentValue() instanceof IGridConnectedBlockEntity connectedBlockEntity && + tag instanceof CompoundTag c) { + connectedBlockEntity.getMainNode().loadFromNBT(c); } + return null; + } +} - - // 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); +static { + ClassSyncData.getClassData(HullMachine.class).setCustomTransformerForField("gridNodeHost", + new GridNodeHostTransformer()); } -``` -Some types may be too complex to be processed using this system. For more complex NBT interactions, use the `@FieldDataModifier` and `@CustomDataField` annotations. \ No newline at end of file +``` \ No newline at end of file diff --git a/src/main/java/com/gregtechceu/gtceu/api/block/MetaMachineBlock.java b/src/main/java/com/gregtechceu/gtceu/api/block/MetaMachineBlock.java index f2f4ee4248c..986fef65c54 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/block/MetaMachineBlock.java +++ b/src/main/java/com/gregtechceu/gtceu/api/block/MetaMachineBlock.java @@ -11,9 +11,9 @@ import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; import com.gregtechceu.gtceu.api.machine.feature.*; import com.gregtechceu.gtceu.api.machine.trait.feature.IInteractionTrait; +import com.gregtechceu.gtceu.api.sync_system.ManagedSyncBlockEntity; import com.gregtechceu.gtceu.common.data.GTItems; import com.gregtechceu.gtceu.common.machine.owner.MachineOwner; -import com.gregtechceu.gtceu.syncsystem.ManagedSyncBlockEntity; import com.gregtechceu.gtceu.utils.GTUtil; import net.minecraft.MethodsReturnNonnullByDefault; diff --git a/src/main/java/com/gregtechceu/gtceu/api/block/PipeBlock.java b/src/main/java/com/gregtechceu/gtceu/api/block/PipeBlock.java index fccd8a8bc3d..26a86e594c5 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/block/PipeBlock.java +++ b/src/main/java/com/gregtechceu/gtceu/api/block/PipeBlock.java @@ -13,6 +13,7 @@ import com.gregtechceu.gtceu.api.pipenet.IPipeType; import com.gregtechceu.gtceu.api.pipenet.LevelPipeNet; import com.gregtechceu.gtceu.api.pipenet.PipeNet; +import com.gregtechceu.gtceu.api.sync_system.ManagedSyncBlockEntity; import com.gregtechceu.gtceu.client.model.PipeModel; import com.gregtechceu.gtceu.client.renderer.block.PipeBlockRenderer; import com.gregtechceu.gtceu.common.data.GTItems; @@ -20,7 +21,6 @@ import com.gregtechceu.gtceu.common.item.CoverPlaceBehavior; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.data.recipe.VanillaRecipeHelper; -import com.gregtechceu.gtceu.syncsystem.ManagedSyncBlockEntity; import com.gregtechceu.gtceu.utils.GTUtil; import com.lowdragmc.lowdraglib.client.renderer.IBlockRendererProvider; diff --git a/src/main/java/com/gregtechceu/gtceu/api/blockentity/IGregtechBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/api/blockentity/IGregtechBlockEntity.java index 4fd12fcf388..946cb3f5657 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/blockentity/IGregtechBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/api/blockentity/IGregtechBlockEntity.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.api.blockentity; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.syncsystem.ISyncManaged; +import com.gregtechceu.gtceu.api.sync_system.ISyncManaged; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; diff --git a/src/main/java/com/gregtechceu/gtceu/api/blockentity/PipeBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/api/blockentity/PipeBlockEntity.java index 31a9baa18cd..63d599bf6a1 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/blockentity/PipeBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/api/blockentity/PipeBlockEntity.java @@ -12,12 +12,12 @@ import com.gregtechceu.gtceu.api.item.tool.IToolGridHighlight; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.pipenet.*; +import com.gregtechceu.gtceu.api.sync_system.ManagedSyncBlockEntity; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.data.GTMaterialBlocks; import com.gregtechceu.gtceu.common.data.GTMaterials; -import com.gregtechceu.gtceu.syncsystem.ManagedSyncBlockEntity; -import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.GTUtil; import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/ICoverable.java b/src/main/java/com/gregtechceu/gtceu/api/capability/ICoverable.java index 2d6edb9f7ac..16852d2a582 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/ICoverable.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/ICoverable.java @@ -8,8 +8,8 @@ import com.gregtechceu.gtceu.api.cover.CoverDefinition; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.gregtechceu.gtceu.api.sync_system.ISyncManaged; import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; -import com.gregtechceu.gtceu.syncsystem.ISyncManaged; import com.gregtechceu.gtceu.utils.GTUtil; import net.minecraft.core.BlockPos; diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/CoverBehavior.java b/src/main/java/com/gregtechceu/gtceu/api/cover/CoverBehavior.java index 91d5b433029..7da44721bec 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/CoverBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/CoverBehavior.java @@ -8,14 +8,14 @@ import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.item.tool.IToolGridHighlight; import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.sync_system.ISyncManaged; +import com.gregtechceu.gtceu.api.sync_system.ManagedSyncBlockEntity; +import com.gregtechceu.gtceu.api.sync_system.SyncDataHolder; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; import com.gregtechceu.gtceu.client.renderer.cover.ICoverRenderer; import com.gregtechceu.gtceu.client.renderer.cover.IDynamicCoverRenderer; -import com.gregtechceu.gtceu.syncsystem.ISyncManaged; -import com.gregtechceu.gtceu.syncsystem.ManagedSyncBlockEntity; -import com.gregtechceu.gtceu.syncsystem.SyncDataHolder; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/FilterHandler.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/FilterHandler.java index fe2e9c3bfef..ea051ee971f 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/FilterHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/FilterHandler.java @@ -6,11 +6,11 @@ import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; import com.gregtechceu.gtceu.api.machine.MachineCoverContainer; import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.sync_system.ISyncManaged; +import com.gregtechceu.gtceu.api.sync_system.SyncDataHolder; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; -import com.gregtechceu.gtceu.syncsystem.ISyncManaged; -import com.gregtechceu.gtceu.syncsystem.SyncDataHolder; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; import com.lowdragmc.lowdraglib.gui.widget.Widget; diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/FilterHandlers.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/FilterHandlers.java index 50d74890ae4..cb269e0aa23 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/FilterHandlers.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/FilterHandlers.java @@ -1,6 +1,6 @@ package com.gregtechceu.gtceu.api.cover.filter; -import com.gregtechceu.gtceu.syncsystem.ISyncManaged; +import com.gregtechceu.gtceu.api.sync_system.ISyncManaged; import net.minecraft.world.item.ItemStack; import net.minecraftforge.fluids.FluidStack; diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/IMaterialRegistryManager.java b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/IMaterialRegistryManager.java index 4b0e8e17c42..b5a55466bac 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/IMaterialRegistryManager.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/IMaterialRegistryManager.java @@ -79,6 +79,8 @@ public interface IMaterialRegistryManager { */ Material getMaterial(String name); + Material getMaterial(ResourceLocation resourceLocation); + ResourceLocation getKey(Material material); /** diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineCoverContainer.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineCoverContainer.java index 9605acf4fc0..012fa549ad2 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineCoverContainer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineCoverContainer.java @@ -4,10 +4,12 @@ import com.gregtechceu.gtceu.api.capability.ICoverable; import com.gregtechceu.gtceu.api.cover.CoverBehavior; import com.gregtechceu.gtceu.api.cover.CoverDefinition; +import com.gregtechceu.gtceu.api.sync_system.ISyncManaged; +import com.gregtechceu.gtceu.api.sync_system.SyncDataHolder; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; -import com.gregtechceu.gtceu.syncsystem.ISyncManaged; -import com.gregtechceu.gtceu.syncsystem.SyncDataHolder; -import com.gregtechceu.gtceu.syncsystem.annotations.*; import net.minecraft.core.Direction; import net.minecraft.world.phys.shapes.VoxelShape; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java index 0f778843e26..8e0593be36b 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java @@ -29,6 +29,11 @@ import com.gregtechceu.gtceu.api.machine.trait.feature.IRenderingTrait; import com.gregtechceu.gtceu.api.misc.*; import com.gregtechceu.gtceu.api.pattern.util.RelativeDirection; +import com.gregtechceu.gtceu.api.sync_system.ManagedSyncBlockEntity; +import com.gregtechceu.gtceu.api.sync_system.SyncDataHolder; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; import com.gregtechceu.gtceu.client.model.IBlockEntityRendererBakedModel; import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; @@ -39,11 +44,6 @@ import com.gregtechceu.gtceu.common.item.tool.behavior.ToolModeSwitchBehavior; import com.gregtechceu.gtceu.common.machine.owner.MachineOwner; import com.gregtechceu.gtceu.common.machine.owner.PlayerOwner; -import com.gregtechceu.gtceu.syncsystem.ManagedSyncBlockEntity; -import com.gregtechceu.gtceu.syncsystem.SyncDataHolder; -import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.GTUtil; import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java index f2a176621b8..71a9d768080 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java @@ -20,13 +20,13 @@ import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; import com.gregtechceu.gtceu.api.recipe.ui.GTRecipeTypeUI; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; import com.gregtechceu.gtceu.common.item.IntCircuitBehaviour; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.data.lang.LangHandler; -import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.ISubscription; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java index bd3f7374033..a2f6f081a82 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java @@ -7,9 +7,9 @@ import com.gregtechceu.gtceu.api.machine.feature.IExplosionMachine; import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.config.ConfigHolder; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; import com.lowdragmc.lowdraglib.gui.texture.ProgressTexture; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java index 524ed816642..4c0546d46f3 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/WorkableTieredMachine.java @@ -6,8 +6,8 @@ import com.gregtechceu.gtceu.api.machine.feature.*; import com.gregtechceu.gtceu.api.machine.trait.*; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.GTUtil; import com.gregtechceu.gtceu.utils.ISubscription; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/MultiblockControllerMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/MultiblockControllerMachine.java index fee56e23d70..64ec30a1ccf 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/MultiblockControllerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/MultiblockControllerMachine.java @@ -12,11 +12,11 @@ import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; import com.gregtechceu.gtceu.api.pattern.MultiblockState; import com.gregtechceu.gtceu.api.pattern.MultiblockWorldSavedData; +import com.gregtechceu.gtceu.api.sync_system.annotations.ClientFieldChangeListener; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; -import com.gregtechceu.gtceu.syncsystem.annotations.ClientFieldChangeListener; -import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/TieredWorkableElectricMultiblockMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/TieredWorkableElectricMultiblockMachine.java index 0b7802a67c8..f01278ff0a9 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/TieredWorkableElectricMultiblockMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/TieredWorkableElectricMultiblockMachine.java @@ -4,7 +4,7 @@ import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.machine.feature.IOverclockMachine; import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import net.minecraft.MethodsReturnNonnullByDefault; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java index f1e93b5b2b5..283e37d8c62 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java @@ -18,8 +18,8 @@ import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.misc.EnergyContainerList; import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifierList; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.common.data.GTRecipeModifiers; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.gregtechceu.gtceu.utils.GTUtil; import com.lowdragmc.lowdraglib.gui.modular.ModularUI; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableMultiblockMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableMultiblockMachine.java index ec503aa84d6..b6800847825 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableMultiblockMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableMultiblockMachine.java @@ -16,9 +16,9 @@ import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.ISubscription; import net.minecraft.MethodsReturnNonnullByDefault; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/part/MultiblockPartMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/part/MultiblockPartMachine.java index c1c3640d981..851d246fcea 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/part/MultiblockPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/part/MultiblockPartMachine.java @@ -9,9 +9,9 @@ import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; import com.gregtechceu.gtceu.api.machine.trait.IRecipeHandlerTrait; import com.gregtechceu.gtceu.api.machine.trait.RecipeHandlerList; +import com.gregtechceu.gtceu.api.sync_system.annotations.ClientFieldChangeListener; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; -import com.gregtechceu.gtceu.syncsystem.annotations.ClientFieldChangeListener; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/part/TieredIOPartMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/part/TieredIOPartMachine.java index d27f64e6476..4656665301e 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/part/TieredIOPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/part/TieredIOPartMachine.java @@ -3,9 +3,9 @@ import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.IControllable; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import net.minecraft.MethodsReturnNonnullByDefault; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SimpleSteamMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SimpleSteamMachine.java index 91409caea89..6aa0e01e806 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SimpleSteamMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SimpleSteamMachine.java @@ -19,9 +19,9 @@ import com.gregtechceu.gtceu.api.recipe.RecipeHelper; import com.gregtechceu.gtceu.api.recipe.modifier.ModifierFunction; import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifier; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; import com.gregtechceu.gtceu.common.recipe.condition.VentCondition; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.lowdragmc.lowdraglib.gui.modular.ModularUI; import com.lowdragmc.lowdraglib.gui.widget.LabelWidget; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamBoilerMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamBoilerMachine.java index 2214cdc6ec9..1b8195b229c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamBoilerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamBoilerMachine.java @@ -17,11 +17,11 @@ import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.modifier.ModifierFunction; import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifier; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.common.item.PortableScannerBehavior; import com.gregtechceu.gtceu.config.ConfigHolder; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.ISubscription; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamMachine.java index 9493b41ff55..563fc3ecf67 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamMachine.java @@ -6,8 +6,8 @@ import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.common.data.GTMaterials; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.world.level.block.state.properties.BooleanProperty; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamWorkableMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamWorkableMachine.java index 5f7f827cbc6..e224f75d785 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamWorkableMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamWorkableMachine.java @@ -12,9 +12,9 @@ import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; import com.gregtechceu.gtceu.api.machine.trait.*; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; -import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.ISubscription; import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTrait.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTrait.java index 9edf100f733..36b65137e0c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTrait.java @@ -1,9 +1,9 @@ package com.gregtechceu.gtceu.api.machine.trait; import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.sync_system.ISyncManaged; +import com.gregtechceu.gtceu.api.sync_system.SyncDataHolder; import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; -import com.gregtechceu.gtceu.syncsystem.ISyncManaged; -import com.gregtechceu.gtceu.syncsystem.SyncDataHolder; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableEnergyContainer.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableEnergyContainer.java index 5868a1fffe9..ecafbf2c766 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableEnergyContainer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableEnergyContainer.java @@ -14,9 +14,9 @@ import com.gregtechceu.gtceu.api.misc.EnergyContainerList; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.ingredient.EnergyStack; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.config.ConfigHolder; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.GTUtil; import net.minecraft.MethodsReturnNonnullByDefault; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableFluidTank.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableFluidTank.java index b4eedaf3e97..aaa3149cc0a 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableFluidTank.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableFluidTank.java @@ -7,10 +7,10 @@ import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.ingredient.FluidIngredient; import com.gregtechceu.gtceu.api.recipe.ingredient.IntProviderFluidIngredient; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.fluid.CustomFluidTank; import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.GTTransferUtils; import net.minecraft.core.Direction; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableItemStackHandler.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableItemStackHandler.java index 68ac24f5f24..95a4cd0f853 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableItemStackHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableItemStackHandler.java @@ -9,9 +9,9 @@ import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.ingredient.IntProviderIngredient; import com.gregtechceu.gtceu.api.recipe.ingredient.SizedIngredient; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.GTUtil; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableRecipeHandlerTrait.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableRecipeHandlerTrait.java index e87257f159e..570c8c1cfe7 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableRecipeHandlerTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableRecipeHandlerTrait.java @@ -1,8 +1,8 @@ package com.gregtechceu.gtceu.api.machine.trait; import com.gregtechceu.gtceu.api.machine.MetaMachine; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.ISubscription; import lombok.Getter; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/RecipeLogic.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/RecipeLogic.java index bd338f3193e..2d4e1256ed0 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/RecipeLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/RecipeLogic.java @@ -17,9 +17,13 @@ import com.gregtechceu.gtceu.api.recipe.RecipeHelper; import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.api.sound.AutoReleasedSound; +import com.gregtechceu.gtceu.api.sync_system.annotations.ClientFieldChangeListener; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; +import com.gregtechceu.gtceu.api.sync_system.data_transformers.ValueTransformer; +import com.gregtechceu.gtceu.api.sync_system.data_transformers.ValueTransformers; import com.gregtechceu.gtceu.common.cover.MachineControllerCover; -import com.gregtechceu.gtceu.syncsystem.annotations.*; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.gregtechceu.gtceu.utils.GTMath; import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; @@ -52,6 +56,8 @@ public MachineTraitType getTraitType() { return TYPE; } + protected static class ChanceCacheMap extends IdentityHashMap, Object2IntMap> {} + public enum Status implements StringRepresentable { IDLE("idle"), @@ -128,8 +134,7 @@ public enum Status implements StringRepresentable { protected boolean suspendAfterFinish = false; @Getter @SaveField(nbtKey = "chance_cache") - @CustomDataField - protected final Map, Object2IntMap> chanceCaches = makeChanceCaches(); + protected final ChanceCacheMap chanceCaches = makeChanceCaches(); protected TickableSubscription subscription; protected Object workingSound; @@ -611,49 +616,64 @@ public boolean showFancyTooltip() { return waitingReason != null; } - protected Map, Object2IntMap> makeChanceCaches() { - Map, Object2IntMap> map = new IdentityHashMap<>(); + protected ChanceCacheMap makeChanceCaches() { + ChanceCacheMap map = new ChanceCacheMap(); for (RecipeCapability cap : GTRegistries.RECIPE_CAPABILITIES.values()) { map.put(cap, cap.makeChanceCache()); } return map; } - @FieldDataModifier(fieldName = "chanceCaches", target = FieldDataModifier.ModifyTarget.SAVE_NBT) - private Tag saveChanceCacheData(Tag tag, boolean saveClientFields) { - CompoundTag chanceCache = new CompoundTag(); - this.chanceCaches.forEach((cap, cache) -> { - ListTag cacheTag = new ListTag(); - for (var entry : cache.object2IntEntrySet()) { - CompoundTag compoundTag = new CompoundTag(); - var obj = cap.contentToNbt(entry.getKey()); - compoundTag.put("entry", obj); - compoundTag.putInt("cached_chance", entry.getIntValue()); - cacheTag.add(compoundTag); + static { + ValueTransformers.registerTransformer(ChanceCacheMap.class, new ValueTransformer() { + + @Override + public @NotNull Tag serializeNBT(@NotNull ChanceCacheMap value, + @NotNull TransformerContext context) { + CompoundTag chanceCache = new CompoundTag(); + if (context.currentValue() == null) return chanceCache; + + context.currentValue().forEach((cap, cache) -> { + ListTag cacheTag = new ListTag(); + for (var entry : cache.object2IntEntrySet()) { + CompoundTag compoundTag = new CompoundTag(); + var obj = cap.contentToNbt(entry.getKey()); + compoundTag.put("entry", obj); + compoundTag.putInt("cached_chance", entry.getIntValue()); + cacheTag.add(compoundTag); + } + chanceCache.put(cap.name, cacheTag); + }); + + return chanceCache; } - chanceCache.put(cap.name, cacheTag); - }); - return chanceCache; - } - - @FieldDataModifier(fieldName = "chanceCaches", target = FieldDataModifier.ModifyTarget.LOAD_NBT) - private void loadChanceCacheData(Tag tag, boolean loadClientFields) { - if (tag instanceof CompoundTag chanceCache) { - for (String key : chanceCache.getAllKeys()) { - RecipeCapability cap = GTRegistries.RECIPE_CAPABILITIES.get(key); - if (cap == null) continue; // Necessary since we removed a RecipeCapability when nuking Create - // noinspection rawtypes - Object2IntMap map = this.chanceCaches.computeIfAbsent(cap, RecipeCapability::makeChanceCache); - - ListTag chanceTag = chanceCache.getList(key, Tag.TAG_COMPOUND); - for (int i = 0; i < chanceTag.size(); ++i) { - CompoundTag chanceKey = chanceTag.getCompound(i); - var entry = cap.serializer.fromNbt(chanceKey.get("entry")); - int value = chanceKey.getInt("cached_chance"); - // noinspection unchecked - map.put(entry, value); + + @Override + public @Nullable ChanceCacheMap deserializeNBT(@NotNull Tag tag, + @NotNull TransformerContext context) { + CompoundTag chanceCache = ValueTransformer.assertTagType(CompoundTag.class, tag, context); + if (context.currentValue() != null) { + for (String key : chanceCache.getAllKeys()) { + RecipeCapability cap = GTRegistries.RECIPE_CAPABILITIES.get(key); + // Necessary since a RecipeCapability was removed when removing Create support, and for future + // removals + if (cap == null) continue; + // noinspection rawtypes + Object2IntMap map = context.currentValue().computeIfAbsent(cap, + RecipeCapability::makeChanceCache); + + ListTag chanceTag = chanceCache.getList(key, Tag.TAG_COMPOUND); + for (int i = 0; i < chanceTag.size(); ++i) { + CompoundTag chanceKey = chanceTag.getCompound(i); + var entry = cap.serializer.fromNbt(chanceKey.get("entry")); + int value = chanceKey.getInt("cached_chance"); + // noinspection unchecked + map.put(entry, value); + } + } } + return context.currentValue(); } - } + }); } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/pipenet/PipeCoverContainer.java b/src/main/java/com/gregtechceu/gtceu/api/pipenet/PipeCoverContainer.java index 2fb313b8d50..7b0f8337c4a 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/pipenet/PipeCoverContainer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/pipenet/PipeCoverContainer.java @@ -4,12 +4,14 @@ import com.gregtechceu.gtceu.api.capability.ICoverable; import com.gregtechceu.gtceu.api.cover.CoverBehavior; import com.gregtechceu.gtceu.api.cover.CoverDefinition; +import com.gregtechceu.gtceu.api.sync_system.ISyncManaged; +import com.gregtechceu.gtceu.api.sync_system.SyncDataHolder; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; import com.gregtechceu.gtceu.common.blockentity.FluidPipeBlockEntity; import com.gregtechceu.gtceu.common.blockentity.ItemPipeBlockEntity; -import com.gregtechceu.gtceu.syncsystem.ISyncManaged; -import com.gregtechceu.gtceu.syncsystem.SyncDataHolder; -import com.gregtechceu.gtceu.syncsystem.annotations.*; import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeType.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeType.java index f07bfe7fa34..e35c3f83416 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeType.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeType.java @@ -41,6 +41,7 @@ @Accessors(chain = true) public class GTRecipeType implements RecipeType { + @Getter public final ResourceLocation registryName; public final String group; public final Object2IntSortedMap> maxInputs = new Object2IntAVLTreeMap<>( diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/ClassSyncData.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/ClassSyncData.java new file mode 100644 index 00000000000..cf648d12ba9 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/ClassSyncData.java @@ -0,0 +1,129 @@ +package com.gregtechceu.gtceu.api.sync_system; + +import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.sync_system.annotations.ClientFieldChangeListener; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; +import com.gregtechceu.gtceu.api.sync_system.data_transformers.ValueTransformer; +import com.gregtechceu.gtceu.api.sync_system.data_transformers.ValueTransformers; + +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; +import lombok.Getter; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.VarHandle; +import java.lang.reflect.*; +import java.util.*; + +/** + * Static data for {@link ISyncManaged} classes. + */ +public final class ClassSyncData { + + private static final MethodHandles.Lookup LOOKUP = MethodHandles.lookup(); + private static final ClassValue CACHE = new ClassValue<>() { + + @Override + protected ClassSyncData computeValue(Class type) { + return new ClassSyncData(type); + } + }; + + /** + * Gets the {@link ClassSyncData} object for a specific class + */ + public static ClassSyncData getClassData(Class cls) { + return CACHE.get(cls); + } + + @Getter + private final List managedFields = new ObjectArrayList<>(); + @Getter + private final Set clientSyncFields = new ObjectOpenHashSet<>(); + @Getter + private final Set serverSaveFields = new ObjectOpenHashSet<>(); + + private ClassSyncData(Class clazz) { + MethodHandles.Lookup privateLookup; + try { + privateLookup = MethodHandles.privateLookupIn(clazz, LOOKUP); + } catch (IllegalAccessException e) { + GTCEu.LOGGER.error("Sync: Failed to create method handle lookup for class {}", clazz); + GTCEu.LOGGER.error(e.getMessage()); + return; + } + + Map> changeListeners = new HashMap<>(); + + for (Method method : clazz.getDeclaredMethods()) { + ClientFieldChangeListener listener = method.getAnnotation(ClientFieldChangeListener.class); + if (listener == null) continue; + + if (Modifier.isStatic(method.getModifiers())) + throw new IllegalArgumentException("Cannot apply syncdata annotation to static method: %s.%s" + .formatted(clazz.getName(), method.getName())); + + MethodHandle handle; + try { + handle = privateLookup.unreflect(method); + } catch (IllegalAccessException e) { + GTCEu.LOGGER.error("Sync: Failed to acquire method handle for method {} {}", method.getName(), + clazz.getName()); + GTCEu.LOGGER.error(e.getMessage()); + continue; + } + + changeListeners.computeIfAbsent(listener.fieldName(), $ -> new ArrayList<>()).add(handle); + } + + for (Field field : clazz.getDeclaredFields()) { + + boolean hasSaveField = field.isAnnotationPresent(SaveField.class); + boolean hasClientSync = field.isAnnotationPresent(SyncToClient.class); + if (!hasSaveField && !hasClientSync) continue; + + if (Modifier.isStatic(field.getModifiers())) + throw new IllegalArgumentException("Cannot apply syncdata annotations to static field: %s.%s" + .formatted(field.getDeclaringClass().getName(), field.getName())); + + VarHandle handle; + try { + handle = privateLookup.unreflectVarHandle(field); + } catch (IllegalAccessException e) { + GTCEu.LOGGER.error("Sync: Failed to acquire variable handle for field {} {}", field.getName(), + clazz.getName()); + GTCEu.LOGGER.error(e.getMessage()); + continue; + } + + FieldSyncData syncData = new FieldSyncData(field, handle, ValueTransformers.get(field.getGenericType()), + changeListeners.getOrDefault(field.getName(), List.of())); + managedFields.add(syncData); + if (hasClientSync) clientSyncFields.add(syncData); + if (hasSaveField) serverSaveFields.add(syncData); + } + + Class parent = clazz.getSuperclass(); + if (parent != Object.class) { + ClassSyncData parentHandles = CACHE.get(parent); + managedFields.addAll(parentHandles.managedFields); + clientSyncFields.addAll(parentHandles.clientSyncFields); + serverSaveFields.addAll(parentHandles.serverSaveFields); + } + } + + /** + * Allows for a custom value transformer to be used for a specific field on this class, ignoring any other sync + * behaviour attached to the field. + * + * @param fieldName The field name + * @param transformer The custom value transformer + */ + public void setCustomTransformerForField(String fieldName, ValueTransformer transformer) { + managedFields.stream().filter(f -> Objects.equals(f.fieldName, fieldName)) + .findFirst() + .ifPresent(fieldData -> fieldData.setTransformer(transformer)); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/FieldSyncData.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/FieldSyncData.java new file mode 100644 index 00000000000..9561161a8b6 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/FieldSyncData.java @@ -0,0 +1,40 @@ +package com.gregtechceu.gtceu.api.sync_system; + +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.data_transformers.ValueTransformer; + +import lombok.Setter; +import org.jetbrains.annotations.Nullable; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.VarHandle; +import java.lang.reflect.Field; +import java.util.List; + +/** + * Information about the sync behaviour of fields with sync annotations in ISyncManaged classes + */ +public final class FieldSyncData { + + public final String fieldName, nbtSaveKey; + public final VarHandle handle; + public final boolean triggerClientRerender, isSyncManaged; + @Setter + public @Nullable ValueTransformer transformer; + public final List changeListenerHandles; + public final TypeDeclaration type; + + public FieldSyncData(Field field, VarHandle handle, @Nullable ValueTransformer transformer, + List changeListenerHandles) { + fieldName = field.getName(); + SaveField saveField = field.getAnnotation(SaveField.class); + this.nbtSaveKey = (saveField != null && !saveField.nbtKey().isBlank()) ? saveField.nbtKey() : fieldName; + this.isSyncManaged = ISyncManaged.class.isAssignableFrom(field.getType()); + this.handle = handle; + this.triggerClientRerender = field.isAnnotationPresent(RerenderOnChanged.class); + this.changeListenerHandles = changeListenerHandles; + this.transformer = transformer; + this.type = new TypeDeclaration(field.getGenericType()); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/syncsystem/ISyncManaged.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/ISyncManaged.java similarity index 79% rename from src/main/java/com/gregtechceu/gtceu/syncsystem/ISyncManaged.java rename to src/main/java/com/gregtechceu/gtceu/api/sync_system/ISyncManaged.java index d9bc6fd5abf..ec48892047d 100644 --- a/src/main/java/com/gregtechceu/gtceu/syncsystem/ISyncManaged.java +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/ISyncManaged.java @@ -1,4 +1,6 @@ -package com.gregtechceu.gtceu.syncsystem; +package com.gregtechceu.gtceu.api.sync_system; + +import com.gregtechceu.gtceu.api.sync_system.data_transformers.ValueTransformer; import net.minecraft.nbt.Tag; import net.minecraftforge.common.util.INBTSerializable; @@ -9,7 +11,7 @@ * A field of type {@code T} can be marked with sync annotations if: *
    *
  • {@code T} is primitive - *
  • {@code T} has an {@link IValueTransformer} registered + *
  • {@code T} has an {@link ValueTransformer} registered *
  • {@code T} implements {@link INBTSerializable} *
  • {@code T} is a {@link ISyncManaged} class *
diff --git a/src/main/java/com/gregtechceu/gtceu/syncsystem/ManagedSyncBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/ManagedSyncBlockEntity.java similarity index 61% rename from src/main/java/com/gregtechceu/gtceu/syncsystem/ManagedSyncBlockEntity.java rename to src/main/java/com/gregtechceu/gtceu/api/sync_system/ManagedSyncBlockEntity.java index 04de631b808..c6bab08d64c 100644 --- a/src/main/java/com/gregtechceu/gtceu/syncsystem/ManagedSyncBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/ManagedSyncBlockEntity.java @@ -1,13 +1,14 @@ -package com.gregtechceu.gtceu.syncsystem; +package com.gregtechceu.gtceu.api.sync_system; import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; -import com.gregtechceu.gtceu.common.network.GTNetwork; -import com.gregtechceu.gtceu.syncsystem.network.SPacketUpdateBESyncValue; -import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; @@ -15,16 +16,15 @@ import lombok.Getter; import lombok.Setter; import org.jetbrains.annotations.MustBeInvokedByOverriders; +import org.jetbrains.annotations.Nullable; -import javax.annotation.ParametersAreNonnullByDefault; +import java.util.Objects; /** * A BlockEntity that manages sync and save data via the {@code ISyncManaged} syncdata system. * * @see ISyncManaged */ -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault public abstract class ManagedSyncBlockEntity extends BlockEntity implements ISyncManaged { @Getter @@ -41,14 +41,20 @@ public ManagedSyncBlockEntity(BlockEntityType type, BlockPos pos, BlockState super(type, pos, blockState); } - // Called when this BlockEntity is saved or loaded - + /** + * Saves BE data to world save. + */ @Override protected final void saveAdditional(CompoundTag tag) { super.saveAdditional(tag); tag.merge(getSyncDataHolder().serializeNBT(false)); } + /** + * Loads BE data from world save or from a client update packet. + * Override this to add logic for modifying saved data before it is loaded (e.g. for cross-version compatibility). + * When overriding, {@code super.load(tag)} must be called AFTER any custom logic. + */ @Override @MustBeInvokedByOverriders public void load(CompoundTag tag) { @@ -57,6 +63,9 @@ public void load(CompoundTag tag) { (getLevel() == null ? GTCEu.isClientThread() : getLevel().isClientSide)); } + /** + * Called to gather BE data to be sent when a client loads this BE. + */ @Override public CompoundTag getUpdateTag() { CompoundTag tag = new CompoundTag(); @@ -65,6 +74,14 @@ public CompoundTag getUpdateTag() { return tag; } + /** + * Called to get an update packet which is sent to clients to notify them when a loaded BE's data changes. + */ + @Override + public @Nullable Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this, b -> getSyncDataHolder().serializeNBT(true)); + } + @Override public final void markAsChanged() { isDirty = true; @@ -73,10 +90,8 @@ public final void markAsChanged() { public final void updateTick() { setChanged(); if (isDirty) { - var level = getLevel(); - if (level == null) return; - GTNetwork.sendToAllPlayersTrackingChunk(level.getChunkAt(getBlockPos()), - new SPacketUpdateBESyncValue(this)); + Objects.requireNonNull(getLevel()).sendBlockUpdated(getBlockPos(), getBlockState(), getBlockState(), + Block.UPDATE_CLIENTS); isDirty = false; } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/SyncDataHolder.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/SyncDataHolder.java new file mode 100644 index 00000000000..bf357ef8ae8 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/SyncDataHolder.java @@ -0,0 +1,176 @@ +package com.gregtechceu.gtceu.api.sync_system; + +import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.sync_system.data_transformers.ValueTransformer; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.Tag; + +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; +import it.unimi.dsi.fastutil.objects.ObjectSet; +import org.jetbrains.annotations.Nullable; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.WrongMethodTypeException; +import java.util.*; + +/** + * Class that holds all sync info for an {@link ISyncManaged} object. + */ +public class SyncDataHolder { + + private final ClassSyncData syncData; + private final ISyncManaged holder; + + private final ObjectSet dirtySyncFields = new ObjectOpenHashSet<>(); + private boolean resyncAll = false; + + public SyncDataHolder(ISyncManaged o) { + holder = o; + syncData = ClassSyncData.getClassData(o.getClass()); + } + + /** + * Instructs the sync system that this field has been updated and must be synced with clients. + * + * @param fieldName The field that has changed. + */ + public void markClientSyncFieldDirty(String fieldName) { + dirtySyncFields.add(fieldName); + holder.markAsChanged(); + } + + public void resyncAllFields() { + resyncAll = true; + holder.markAsChanged(); + } + + public CompoundTag serializeNBT(boolean writeClientFields) { + CompoundTag tag = serializeNBT(writeClientFields, resyncAll); + resyncAll = false; + dirtySyncFields.clear(); + return tag; + } + + public CompoundTag serializeNBT(boolean writeClientFields, boolean fullSync) { + Set fieldsToSerialize = writeClientFields ? syncData.getClientSyncFields() : + syncData.getServerSaveFields(); + + CompoundTag tag = new CompoundTag(); + for (var field : fieldsToSerialize) { + if (shouldSerializeField(field, writeClientFields, fullSync)) { + Tag nbtValue = serializeField(holder, field, writeClientFields); + tag.put(field.nbtSaveKey, nbtValue); + } + } + return tag; + } + + private boolean shouldSerializeField(FieldSyncData field, boolean writeClient, boolean fullSync) { + return !writeClient || fullSync || dirtySyncFields.contains(field.fieldName) || field.isSyncManaged; + } + + public void deserializeNBT(CompoundTag tag, boolean readingClientFields) { + Set fieldsToCheck = readingClientFields ? syncData.getClientSyncFields() : + syncData.getServerSaveFields(); + + for (var field : fieldsToCheck) { + + Tag savedValue = tag.get(field.nbtSaveKey); + deserializeField(holder, field, savedValue, readingClientFields); + + if (readingClientFields) { + try { + for (MethodHandle changeListenerHandle : field.changeListenerHandles) { + changeListenerHandle.invoke(holder); + } + } catch (Throwable e) { + if (e instanceof WrongMethodTypeException) { + throw new IllegalArgumentException( + "Invalid method signature for change listener for field %s %s" + .formatted(field.fieldName, holder.getClass().getName())); + } + GTCEu.LOGGER.error("Sync: Error while invoking change listener for field {}", field.fieldName); + GTCEu.LOGGER.error(e); + } + + if (field.triggerClientRerender) holder.scheduleRenderUpdate(); + } + } + } + + @SuppressWarnings("unchecked") + private static Tag serializeField(ISyncManaged holder, FieldSyncData field, + boolean writeClientFields) { + Object currentValue = field.handle.get(holder); + + if (!field.isSyncManaged && currentValue == null) { + var nullCompound = new CompoundTag(); + nullCompound.putBoolean("null", true); + return nullCompound; + } + + try { + + if (field.transformer != null) { + return ((ValueTransformer) field.transformer).serializeNBT(currentValue, + new ValueTransformer.TransformerContext<>(holder, field.type, currentValue, field.fieldName, + writeClientFields)); + } else if (currentValue instanceof ISyncManaged syncObj) { + return syncObj.getSyncDataHolder().serializeNBT(writeClientFields); + } else { + GTCEu.LOGGER.error("Sync: Failed to serialize field {}: Missing value transformer", field.fieldName); + } + + } catch (Exception e) { + GTCEu.LOGGER.error("Sync: Failed to serialize field {}", field.fieldName); + GTCEu.LOGGER.error(e); + } + + return new CompoundTag(); + } + + @SuppressWarnings("unchecked") + private static void deserializeField(ISyncManaged holder, FieldSyncData field, + @Nullable Tag savedValue, + boolean readingClientFields) { + Object currentVal = field.handle.get(holder); + + if (savedValue == null || savedValue instanceof CompoundTag compound && compound.isEmpty()) return; + + if (savedValue instanceof CompoundTag compound && compound.getBoolean("null")) { + field.handle.set(holder, null); + return; + } + + try { + if (field.transformer != null) { + ValueTransformer transformer = (ValueTransformer) field.transformer; + try { + var current = field.handle.get(holder); + Object result = transformer.deserializeNBT(savedValue, new ValueTransformer.TransformerContext<>( + holder, field.type, current, field.fieldName, readingClientFields)); + if (result != current) { + field.handle.set(holder, result); + } + } catch (UnsupportedOperationException e) { + GTCEu.LOGGER.error("Sync: failed to perform VarHandle set: unsupported op {} {}", + field.fieldName, field.handle.toString()); + } + } else if (field.isSyncManaged && savedValue instanceof CompoundTag compound) { + if (currentVal == null) { + GTCEu.LOGGER.error("Sync: ISyncManaged field was null, cannot instantiate {}", + field.fieldName); + return; + } + if (currentVal instanceof ISyncManaged syncObj) + syncObj.getSyncDataHolder().deserializeNBT(compound, readingClientFields); + } else { + GTCEu.LOGGER.error("Sync: Failed to deserialize field {}: Missing value transformer", field.fieldName); + } + } catch (Exception e) { + GTCEu.LOGGER.error("Sync: Failed to deserialize field {}", field.fieldName); + GTCEu.LOGGER.error(e); + } + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/TypeDeclaration.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/TypeDeclaration.java new file mode 100644 index 00000000000..b619e500f49 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/TypeDeclaration.java @@ -0,0 +1,49 @@ +package com.gregtechceu.gtceu.api.sync_system; + +import lombok.Getter; +import org.jetbrains.annotations.Nullable; + +import java.lang.reflect.GenericArrayType; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.util.Arrays; + +public class TypeDeclaration { + + @Getter + private final Type rawType; + @Getter + private final @Nullable Class classValue; + @Getter + private final TypeDeclaration[] genericTypeArgs; + private final @Nullable TypeDeclaration arrayComponentType; + + public TypeDeclaration(Type type) { + this.rawType = type; + + if (type instanceof ParameterizedType parameterizedType) { + this.classValue = (Class) parameterizedType.getRawType(); + this.genericTypeArgs = Arrays.stream(parameterizedType.getActualTypeArguments()).map(TypeDeclaration::new) + .toArray(TypeDeclaration[]::new); + this.arrayComponentType = null; + } else if (type instanceof GenericArrayType genericArrayType) { + this.classValue = null; + this.arrayComponentType = new TypeDeclaration(genericArrayType.getGenericComponentType()); + this.genericTypeArgs = new TypeDeclaration[0]; + } else { + this.classValue = (Class) type; + this.genericTypeArgs = new TypeDeclaration[0]; + this.arrayComponentType = classValue.isArray() ? new TypeDeclaration(classValue.getComponentType()) : null; + } + } + + public boolean isArray() { + return (classValue != null && classValue.isArray()) || (rawType instanceof GenericArrayType); + } + + public TypeDeclaration getArrayComponentType() { + if (arrayComponentType == null) throw new IllegalStateException( + "Attempted to get array component for non-array type %s".formatted(rawType)); + return arrayComponentType; + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/syncsystem/annotations/ClientFieldChangeListener.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/annotations/ClientFieldChangeListener.java similarity index 88% rename from src/main/java/com/gregtechceu/gtceu/syncsystem/annotations/ClientFieldChangeListener.java rename to src/main/java/com/gregtechceu/gtceu/api/sync_system/annotations/ClientFieldChangeListener.java index 9067d1c36c3..2a6029adc4f 100644 --- a/src/main/java/com/gregtechceu/gtceu/syncsystem/annotations/ClientFieldChangeListener.java +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/annotations/ClientFieldChangeListener.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.syncsystem.annotations; +package com.gregtechceu.gtceu.api.sync_system.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/src/main/java/com/gregtechceu/gtceu/syncsystem/annotations/RerenderOnChanged.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/annotations/RerenderOnChanged.java similarity index 87% rename from src/main/java/com/gregtechceu/gtceu/syncsystem/annotations/RerenderOnChanged.java rename to src/main/java/com/gregtechceu/gtceu/api/sync_system/annotations/RerenderOnChanged.java index 717790dbe91..fc30625c39d 100644 --- a/src/main/java/com/gregtechceu/gtceu/syncsystem/annotations/RerenderOnChanged.java +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/annotations/RerenderOnChanged.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.syncsystem.annotations; +package com.gregtechceu.gtceu.api.sync_system.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/src/main/java/com/gregtechceu/gtceu/syncsystem/annotations/SaveField.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/annotations/SaveField.java similarity index 89% rename from src/main/java/com/gregtechceu/gtceu/syncsystem/annotations/SaveField.java rename to src/main/java/com/gregtechceu/gtceu/api/sync_system/annotations/SaveField.java index 61f0bec72d2..1f72ed2208e 100644 --- a/src/main/java/com/gregtechceu/gtceu/syncsystem/annotations/SaveField.java +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/annotations/SaveField.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.syncsystem.annotations; +package com.gregtechceu.gtceu.api.sync_system.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/src/main/java/com/gregtechceu/gtceu/syncsystem/annotations/SyncToClient.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/annotations/SyncToClient.java similarity index 89% rename from src/main/java/com/gregtechceu/gtceu/syncsystem/annotations/SyncToClient.java rename to src/main/java/com/gregtechceu/gtceu/api/sync_system/annotations/SyncToClient.java index 92a4cfebe0d..4e5f66ca2ca 100644 --- a/src/main/java/com/gregtechceu/gtceu/syncsystem/annotations/SyncToClient.java +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/annotations/SyncToClient.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.syncsystem.annotations; +package com.gregtechceu.gtceu.api.sync_system.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/CodecTransformer.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/CodecTransformer.java new file mode 100644 index 00000000000..690abcc9149 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/CodecTransformer.java @@ -0,0 +1,27 @@ +package com.gregtechceu.gtceu.api.sync_system.data_transformers; + +import com.gregtechceu.gtceu.GTCEu; + +import net.minecraft.nbt.NbtOps; +import net.minecraft.nbt.Tag; + +import com.mojang.serialization.Codec; + +public class CodecTransformer implements ValueTransformer { + + private final Codec codec; + + public CodecTransformer(Codec codec) { + this.codec = codec; + } + + @Override + public Tag serializeNBT(T value, ValueTransformer.TransformerContext context) { + return codec.encodeStart(NbtOps.INSTANCE, value).getOrThrow(false, GTCEu.LOGGER::error); + } + + @Override + public T deserializeNBT(Tag tag, ValueTransformer.TransformerContext context) { + return codec.parse(NbtOps.INSTANCE, tag).getOrThrow(false, GTCEu.LOGGER::error); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/EnumTransformer.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/EnumTransformer.java similarity index 51% rename from src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/EnumTransformer.java rename to src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/EnumTransformer.java index 4c90813bf31..3a15d5f7464 100644 --- a/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/EnumTransformer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/EnumTransformer.java @@ -1,14 +1,9 @@ -package com.gregtechceu.gtceu.syncsystem.data_transformers; - -import com.gregtechceu.gtceu.syncsystem.ISyncManaged; -import com.gregtechceu.gtceu.syncsystem.IValueTransformer; +package com.gregtechceu.gtceu.api.sync_system.data_transformers; import net.minecraft.nbt.StringTag; import net.minecraft.nbt.Tag; -import org.jetbrains.annotations.Nullable; - -public class EnumTransformer> implements IValueTransformer { +public class EnumTransformer> implements ValueTransformer { private final Class enumClass; @@ -18,23 +13,24 @@ public EnumTransformer(Class> enumClass) { } @Override - public Tag serializeNBT(E value, ISyncManaged holder) { + public Tag serializeNBT(E value, ValueTransformer.TransformerContext context) { return StringTag.valueOf(value.name()); } @Override - public E deserializeNBT(Tag tag, ISyncManaged holder, @Nullable E currentVal) { + public E deserializeNBT(Tag tag, ValueTransformer.TransformerContext context) { + var enumString = ValueTransformer.assertTagType(StringTag.class, tag, context).getAsString(); E value = null; try { - value = Enum.valueOf(enumClass, tag.getAsString()); + value = Enum.valueOf(enumClass, enumString); } catch (IllegalArgumentException e) { for (E val : enumClass.getEnumConstants()) { - if (val.name().toLowerCase().equals(tag.getAsString())) value = val; + if (val.name().toLowerCase().equals(enumString)) value = val; } } if (value == null) { throw new IllegalArgumentException( - "Unknown enum constant: %s[%s]".formatted(enumClass.getCanonicalName(), tag.getAsString())); + "Unknown enum constant: %s[%s]".formatted(enumClass.getName(), enumString)); } return value; } diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/NBTSerializableTransformer.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/NBTSerializableTransformer.java new file mode 100644 index 00000000000..31b2e54210b --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/NBTSerializableTransformer.java @@ -0,0 +1,30 @@ +package com.gregtechceu.gtceu.api.sync_system.data_transformers; + +import com.gregtechceu.gtceu.GTCEu; + +import net.minecraft.nbt.Tag; +import net.minecraftforge.common.util.INBTSerializable; + +import javax.annotation.Nullable; + +public class NBTSerializableTransformer implements ValueTransformer> { + + @Override + public Tag serializeNBT(INBTSerializable value, + ValueTransformer.TransformerContext> context) { + return value.serializeNBT(); + } + + @Override + public @Nullable INBTSerializable deserializeNBT(Tag tag, + ValueTransformer.TransformerContext> context) { + var currentVal = context.currentValue(); + if (currentVal == null) { + GTCEu.LOGGER.warn( + "Sync: Deserialization of INBTSerializable objects requires an existing object, they cannot be instantiated purely from saved data."); + return null; + } + currentVal.deserializeNBT(ValueTransformer.stripLdlibWrapper(tag)); + return currentVal; + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/ResourceLocationReferenceTransformer.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/ResourceLocationReferenceTransformer.java new file mode 100644 index 00000000000..4f6f6e97057 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/ResourceLocationReferenceTransformer.java @@ -0,0 +1,34 @@ +package com.gregtechceu.gtceu.api.sync_system.data_transformers; + +import net.minecraft.nbt.StringTag; +import net.minecraft.nbt.Tag; +import net.minecraft.resources.ResourceLocation; + +import org.jetbrains.annotations.Nullable; + +import java.util.function.Function; + +public class ResourceLocationReferenceTransformer implements ValueTransformer { + + private final Function getResourceLocation; + private final Function loadFromLocation; + + public ResourceLocationReferenceTransformer(Function getResourceLocation, + Function loadFromLocation) { + this.getResourceLocation = getResourceLocation; + this.loadFromLocation = loadFromLocation; + } + + @Override + public Tag serializeNBT(T value, ValueTransformer.TransformerContext context) { + return StringTag.valueOf(getResourceLocation.apply(value).toString()); + } + + @Override + public @Nullable T deserializeNBT(Tag tag, ValueTransformer.TransformerContext context) { + ResourceLocation location = ResourceLocation + .tryParse(ValueTransformer.assertTagType(StringTag.class, tag, context).getAsString()); + if (location == null) return null; + return loadFromLocation.apply(location); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/SimpleClassTransformer.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/SimpleClassTransformer.java new file mode 100644 index 00000000000..83c85f14989 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/SimpleClassTransformer.java @@ -0,0 +1,33 @@ +package com.gregtechceu.gtceu.api.sync_system.data_transformers; + +import net.minecraft.nbt.Tag; + +import org.jetbrains.annotations.NotNull; + +import java.util.function.Function; + +public class SimpleClassTransformer implements ValueTransformer { + + private final Function write; + private final Function read; + private final Class tagClass; + + public SimpleClassTransformer(Function write, + Function read, + Class tagClass) { + this.write = write; + this.read = read; + this.tagClass = tagClass; + } + + @Override + public @NotNull Tag serializeNBT(T value, ValueTransformer.TransformerContext context) { + return write.apply(value); + } + + @Override + public T deserializeNBT(Tag tag, ValueTransformer.TransformerContext context) { + TagType t = ValueTransformer.assertTagType(tagClass, tag, context); + return read.apply(t); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/ValueTransformer.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/ValueTransformer.java new file mode 100644 index 00000000000..bf1506a9039 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/ValueTransformer.java @@ -0,0 +1,72 @@ +package com.gregtechceu.gtceu.api.sync_system.data_transformers; + +import com.gregtechceu.gtceu.api.sync_system.ISyncManaged; +import com.gregtechceu.gtceu.api.sync_system.TypeDeclaration; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.Tag; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * Represents an object that provides a set of methods for encoding/decoding a value of type {@code } into a + * {@link Tag} + * + * @param The type which this transformer can encode + */ +public interface ValueTransformer { + + /** + * A record holding information about the context from which this value transformer is currently being invoked. + * + * @param holder The sync object which holds the specific field being serialized by this transformer. + * @param type An object describing the type of the field currently being serialized/deserialized. + * @param currentValue The current value (if any) of the field currently being serialized/deserialized. + * @param fieldName The name of the field being serialized, or a string denoting the current sync context if not + * being invoked directly on a field. + * @param isClientSync Whether NBT is currently being generated as part of a sync update to the client, not as NBT + * being + * written to the server save. + */ + record TransformerContext(@NotNull ISyncManaged holder, @NotNull TypeDeclaration type, + @Nullable U currentValue, @Nullable String fieldName, boolean isClientSync) {} + + /** + * Casts a given NBT tag to a specific tag type, throwing an error if the tag cannot be casted. + */ + @SuppressWarnings("unchecked") + static TagType assertTagType(Class cls, Tag tag, TransformerContext ctx) { + try { + return (TagType) (tag); + } catch (ClassCastException c) { + throw new ClassCastException("Sync: Invalid tag type: expected %s, got %s [%s, field %s]" + .formatted(cls.toString(), tag.getClass().getName(), ctx.holder(), ctx.fieldName)); + } + } + + /** + * Extracts the actual data tag from an LDLib tag structure which is present in some serialized objects. + */ + static Tag stripLdlibWrapper(Tag t) { + if (!(t instanceof CompoundTag tag)) return t; + if (tag.contains("p") && tag.contains("t")) { + return tag.getCompound("p"); + } + if (tag.contains("t", Tag.TAG_COMPOUND)) { + return tag.getCompound("t").getCompound("p"); + } + return tag; + } + + /** + * A method which serializes this value into a tag, based on the current value and provided transformer context. + */ + Tag serializeNBT(T value, TransformerContext context); + + /** + * A method which deserializes this value, based on the stored tag and provided transformer context. + */ + @Nullable + T deserializeNBT(Tag tag, TransformerContext context); +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/ValueTransformers.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/ValueTransformers.java new file mode 100644 index 00000000000..5a123341f30 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/ValueTransformers.java @@ -0,0 +1,197 @@ +package com.gregtechceu.gtceu.api.sync_system.data_transformers; + +import com.gregtechceu.gtceu.api.GTCEuAPI; +import com.gregtechceu.gtceu.api.cover.CoverBehavior; +import com.gregtechceu.gtceu.api.data.chemical.material.Material; +import com.gregtechceu.gtceu.api.recipe.GTRecipe; +import com.gregtechceu.gtceu.api.recipe.GTRecipeType; +import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.gregtechceu.gtceu.api.sync_system.TypeDeclaration; +import com.gregtechceu.gtceu.api.sync_system.data_transformers.collections.ListTransformer; +import com.gregtechceu.gtceu.api.sync_system.data_transformers.collections.MapTransformer; +import com.gregtechceu.gtceu.api.sync_system.data_transformers.collections.ObjectArrayTransformer; +import com.gregtechceu.gtceu.api.sync_system.data_transformers.collections.SetTransformer; +import com.gregtechceu.gtceu.api.sync_system.data_transformers.gtceu.CoverBehaviorTransformer; +import com.gregtechceu.gtceu.api.sync_system.data_transformers.gtceu.GTRecipeTransformer; +import com.gregtechceu.gtceu.api.sync_system.data_transformers.gtceu.MonitorGroupTransformer; +import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; +import com.gregtechceu.gtceu.common.machine.multiblock.electric.monitor.MonitorGroup; + +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.*; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.common.extensions.IForgeItemStack; +import net.minecraftforge.common.util.INBTSerializable; +import net.minecraftforge.fluids.FluidStack; + +import it.unimi.dsi.fastutil.objects.Reference2ReferenceOpenHashMap; +import org.jetbrains.annotations.Nullable; + +import java.lang.reflect.Type; +import java.util.*; +import java.util.function.Function; +import java.util.function.Supplier; + +public final class ValueTransformers { + + private static final Map, ValueTransformer> REGISTERED = new Reference2ReferenceOpenHashMap<>(); + private static final Map, Supplier>> REGISTERED_SUPPLIERS = new Reference2ReferenceOpenHashMap<>(); + + private static final Map PRIMITIVE_TO_BOXED = Map.of( + boolean.class, Boolean.class, + byte.class, Byte.class, + char.class, Character.class, + short.class, Short.class, + int.class, Integer.class, + long.class, Long.class, + float.class, Float.class, + double.class, Double.class, + void.class, Void.class); + + private static final Map> TYPE_CACHE = new Reference2ReferenceOpenHashMap<>(); + + /** + * Gets the {@link ValueTransformer} associated with a specific type. + */ + public static @Nullable ValueTransformer get(Type type) { + if (type instanceof Class cls) type = cls.isPrimitive() ? PRIMITIVE_TO_BOXED.get(cls) : cls; + return TYPE_CACHE.computeIfAbsent(type, ValueTransformers::generateOrGetTransformer); + } + + private static @Nullable ValueTransformer generateOrGetTransformer(Type type) { + TypeDeclaration declaration = new TypeDeclaration(type); + Class clazz = declaration.getClassValue(); + + if (clazz != null && REGISTERED.containsKey(clazz)) return REGISTERED.get(clazz); + + if (clazz == null || clazz.isArray()) { + ValueTransformer componentTx = get(declaration.getArrayComponentType().getRawType()); + if (componentTx != null) return new ObjectArrayTransformer<>(componentTx); + return null; + } + + if (clazz.isEnum()) { + @SuppressWarnings("unchecked") + Class> enumClass = (Class>) clazz; + return new EnumTransformer<>(enumClass); + } + + for (var entry : REGISTERED_SUPPLIERS.entrySet()) { + if (entry.getKey().isAssignableFrom(clazz)) return entry.getValue().get(); + } + + for (var entry : REGISTERED.entrySet()) { + if (entry.getKey().isAssignableFrom(clazz)) return entry.getValue(); + } + + return null; + } + + /** + * Registers a {@link ValueTransformer} for the given class or interface. + * If registering a type with generic arguments, instead use {@code registerTransformerSupplier} to create a new + * transformer instance for each set of generic type arguments. + * + * @param type The class to register this {@link ValueTransformer} for + * @param transformer The transformer being registered + */ + public static void registerTransformer(Class type, ValueTransformer transformer) { + if (REGISTERED.containsKey(type)) + throw new IllegalArgumentException("Attempted to register transformer for %s twice".formatted(type)); + REGISTERED.put(type, transformer); + } + + /** + * Creates and registers a {@link ValueTransformer} for the given class using predefined NBT parsing functions. + * + * @param type The class to register this {@link ValueTransformer} for + * @param write A function that writes the value into a specific tag type + * @param read A function that reads the value from a specific tag type + * @param tagClass The tag type the value is serialized into + */ + public static void registerSimpleClassTransformer(Class type, Function write, + Function read, + Class tagClass) { + if (REGISTERED.containsKey(type)) + throw new IllegalArgumentException("Attempted to register transformer for %s twice".formatted(type)); + ValueTransformer transformer = new SimpleClassTransformer<>(write, read, tagClass); + REGISTERED.putIfAbsent(type, transformer); + } + + /** + * Registers a supplier that supplies instances of a specific transformer type. + * The supplier will be called to create new instances of the transformer for each unique set of generic type + * arguments passed to the given class. + * + * @param type The class to register this {@link ValueTransformer} supplier for + * @param func Supplier function + */ + public static void registerTransformerSupplier(Class type, Supplier> func) { + if (REGISTERED_SUPPLIERS.containsKey(type)) + throw new IllegalArgumentException("Attempted to register transformer for %s twice".formatted(type)); + REGISTERED_SUPPLIERS.put(type, func); + } + + static { + + //// Primitives + + registerSimpleClassTransformer(Integer.class, IntTag::valueOf, IntTag::getAsInt, IntTag.class); + registerSimpleClassTransformer(Long.class, LongTag::valueOf, LongTag::getAsLong, LongTag.class); + registerSimpleClassTransformer(Float.class, FloatTag::valueOf, FloatTag::getAsFloat, FloatTag.class); + registerSimpleClassTransformer(Double.class, DoubleTag::valueOf, DoubleTag::getAsDouble, DoubleTag.class); + registerSimpleClassTransformer(Short.class, ShortTag::valueOf, ShortTag::getAsShort, ShortTag.class); + registerSimpleClassTransformer(Byte.class, ByteTag::valueOf, ByteTag::getAsByte, ByteTag.class); + registerSimpleClassTransformer(Character.class, (b) -> IntTag.valueOf(b), (t) -> (char) t.getAsInt(), + IntTag.class); + registerSimpleClassTransformer(Boolean.class, ByteTag::valueOf, (b) -> b.getAsByte() != 0, ByteTag.class); + + // Primtive arrays + registerSimpleClassTransformer(int[].class, IntArrayTag::new, IntArrayTag::getAsIntArray, IntArrayTag.class); + registerSimpleClassTransformer(long[].class, LongArrayTag::new, LongArrayTag::getAsLongArray, + LongArrayTag.class); + registerSimpleClassTransformer(byte[].class, ByteArrayTag::new, ByteArrayTag::getAsByteArray, + ByteArrayTag.class); + + //// Java classes and standard minecraft/forge classes + + registerSimpleClassTransformer(String.class, StringTag::valueOf, StringTag::getAsString, StringTag.class); + registerSimpleClassTransformer(ItemStack.class, IForgeItemStack::serializeNBT, ItemStack::of, + CompoundTag.class); + registerSimpleClassTransformer(FluidStack.class, (v) -> v.writeToNBT(new CompoundTag()), + FluidStack::loadFluidStackFromNBT, CompoundTag.class); + + // The default value supplier will never be called as NbtUtils::loadUUID will throw if the UUID is invalid. + registerSimpleClassTransformer(UUID.class, NbtUtils::createUUID, NbtUtils::loadUUID, IntArrayTag.class); + + registerSimpleClassTransformer(BlockPos.class, NbtUtils::writeBlockPos, NbtUtils::readBlockPos, + CompoundTag.class); + registerSimpleClassTransformer(CompoundTag.class, (v) -> v, (v) -> v, CompoundTag.class); + + registerSimpleClassTransformer(Component.class, (c) -> StringTag.valueOf(Component.Serializer.toJson(c)), + t -> { + var comp = Component.Serializer.fromJson(t.getAsString()); + return comp == null ? Component.empty() : comp; + }, StringTag.class); + + registerTransformer(INBTSerializable.class, new NBTSerializableTransformer()); + + registerTransformerSupplier(List.class, ListTransformer::new); + registerTransformerSupplier(Map.class, MapTransformer::new); + registerTransformerSupplier(Set.class, SetTransformer::new); + + //// GT specific classes + + registerTransformer(GTRecipe.class, new GTRecipeTransformer()); + registerTransformer(MachineRenderState.class, new CodecTransformer<>(MachineRenderState.CODEC)); + registerTransformer(GTRecipeType.class, new ResourceLocationReferenceTransformer<>( + GTRecipeType::getRegistryName, GTRegistries.RECIPE_TYPES::get)); + registerTransformer(Material.class, new ResourceLocationReferenceTransformer<>( + Material::getResourceLocation, GTCEuAPI.materialManager::getMaterial)); + registerTransformer(MonitorGroup.class, new MonitorGroupTransformer()); + + registerTransformer(CoverBehavior.class, new CoverBehaviorTransformer()); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/ListTransformer.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/ListTransformer.java new file mode 100644 index 00000000000..9647d994ad6 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/ListTransformer.java @@ -0,0 +1,61 @@ +package com.gregtechceu.gtceu.api.sync_system.data_transformers.collections; + +import com.gregtechceu.gtceu.api.sync_system.data_transformers.ValueTransformer; +import com.gregtechceu.gtceu.api.sync_system.data_transformers.ValueTransformers; + +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.Tag; + +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; + +public class ListTransformer implements ValueTransformer> { + + private @Nullable ValueTransformer elementTransformer = null; + + @SuppressWarnings("unchecked") + private ValueTransformer getElemTransformer(ValueTransformer.TransformerContext> context) { + if (elementTransformer != null) return elementTransformer; + var innerType = context.type().getGenericTypeArgs()[0].getRawType(); + var transformer = (ValueTransformer) ValueTransformers.get(innerType); + if (transformer == null) { + throw new IllegalStateException("Sync: Failed to serialize list: Missing transformer for inner type: %s" + .formatted(innerType)); + } + elementTransformer = transformer; + return elementTransformer; + } + + private ValueTransformer.TransformerContext getInnerElemContext(@Nullable T elem, + ValueTransformer.TransformerContext> parentContext) { + return new TransformerContext<>(parentContext.holder(), + parentContext.type().getGenericTypeArgs()[0], elem, parentContext.fieldName() + "[element]", + parentContext.isClientSync()); + } + + @Override + public Tag serializeNBT(List value, ValueTransformer.TransformerContext> context) { + ListTag list = new ListTag(); + for (var obj : value) { + list.add(getElemTransformer(context).serializeNBT(obj, getInnerElemContext(obj, context))); + } + return list; + } + + @Override + public @Nullable List deserializeNBT(Tag tag, ValueTransformer.TransformerContext> context) { + var current = context.currentValue(); + ListTag listTag = ValueTransformer.assertTagType(ListTag.class, tag, context); + if (current != null) current.clear(); + else current = new ArrayList<>(); + List finalCurrent = current; + for (var t : listTag) { + T val = getElemTransformer(context).deserializeNBT(ValueTransformer.stripLdlibWrapper(t), + getInnerElemContext(null, context)); + if (val != null) finalCurrent.add(val); + } + return current; + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/MapTransformer.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/MapTransformer.java new file mode 100644 index 00000000000..b66985a169e --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/MapTransformer.java @@ -0,0 +1,103 @@ +package com.gregtechceu.gtceu.api.sync_system.data_transformers.collections; + +import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.sync_system.data_transformers.ValueTransformer; +import com.gregtechceu.gtceu.api.sync_system.data_transformers.ValueTransformers; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.Tag; + +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import org.jetbrains.annotations.Nullable; + +import java.util.Map; + +public class MapTransformer implements ValueTransformer> { + + private @Nullable ValueTransformer keyTransformer; + private @Nullable ValueTransformer valueTransformer; + + @SuppressWarnings("unchecked") + private ValueTransformer getKeyTransformer(ValueTransformer.TransformerContext> context) { + if (keyTransformer != null) return keyTransformer; + var innerType = context.type().getGenericTypeArgs()[0].getRawType(); + var transformer = (ValueTransformer) ValueTransformers.get(innerType); + if (transformer == null) { + throw new IllegalStateException("Sync: Failed to serialize map: Missing transformer for key type: %s" + .formatted(innerType)); + } + keyTransformer = transformer; + return keyTransformer; + } + + @SuppressWarnings("unchecked") + private ValueTransformer getValueTransformer(ValueTransformer.TransformerContext> context) { + if (valueTransformer != null) return valueTransformer; + var innerType = context.type().getGenericTypeArgs()[1].getRawType(); + var transformer = (ValueTransformer) ValueTransformers.get(innerType); + if (transformer == null) { + throw new IllegalStateException("Sync: Failed to serialize map: Missing transformer for value type: %s" + .formatted(innerType)); + } + valueTransformer = transformer; + return valueTransformer; + } + + private ValueTransformer.TransformerContext getInnerKeyContext(@Nullable K key, + ValueTransformer.TransformerContext> parentContext) { + return new TransformerContext<>(parentContext.holder(), + parentContext.type().getGenericTypeArgs()[0], key, parentContext.fieldName() + "[key]", + parentContext.isClientSync()); + } + + private ValueTransformer.TransformerContext getInnerValueContext(@Nullable V value, + ValueTransformer.TransformerContext> parentContext) { + return new TransformerContext<>(parentContext.holder(), + parentContext.type().getGenericTypeArgs()[1], value, + parentContext.fieldName() + "[value]", + parentContext.isClientSync()); + } + + @Override + public Tag serializeNBT(Map value, ValueTransformer.TransformerContext> context) { + ListTag entries = new ListTag(); + for (var entry : value.entrySet()) { + CompoundTag compound = new CompoundTag(); + compound.put("k", + getKeyTransformer(context).serializeNBT(entry.getKey(), + getInnerKeyContext(entry.getKey(), context))); + compound.put("v", + getValueTransformer(context).serializeNBT(entry.getValue(), + getInnerValueContext(entry.getValue(), context))); + entries.add(compound); + } + return entries; + } + + @Override + public Map deserializeNBT(Tag tag, ValueTransformer.TransformerContext> context) { + var current = context.currentValue(); + ListTag listTag = ValueTransformer.assertTagType(ListTag.class, tag, context); + if (current != null) current.clear(); + else current = new Object2ObjectOpenHashMap<>(); + for (Tag entryTag : listTag) { + CompoundTag compound = (CompoundTag) entryTag; + + Tag keyTag = compound.get("k"); + Tag valueTag = compound.get("v"); + if (keyTag == null || valueTag == null) continue; + + K key = getKeyTransformer(context).deserializeNBT(keyTag, getInnerKeyContext(null, context)); + V value = getValueTransformer(context).deserializeNBT(valueTag, getInnerValueContext(null, context)); + if (key == null || value == null) { + GTCEu.LOGGER.warn( + "Sync: Skipping null key or field while deserializing map: [key: {}, value: {}] [nbt key: {}, nbt value: {}]", + key, value, keyTag, valueTag); + continue; + } ; + current.put(key, value); + } + return current; + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/ObjectArrayTransformer.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/ObjectArrayTransformer.java new file mode 100644 index 00000000000..4ba1362aeba --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/ObjectArrayTransformer.java @@ -0,0 +1,59 @@ +package com.gregtechceu.gtceu.api.sync_system.data_transformers.collections; + +import com.gregtechceu.gtceu.api.sync_system.data_transformers.ValueTransformer; + +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.Tag; + +import org.jetbrains.annotations.Nullable; + +import java.lang.reflect.Array; +import java.util.Arrays; + +public class ObjectArrayTransformer implements ValueTransformer { + + private final ValueTransformer elementTransformer; + + public ObjectArrayTransformer(ValueTransformer elementTransformer) { + this.elementTransformer = elementTransformer; + } + + private ValueTransformer.TransformerContext getInnerElemContext(@Nullable T elem, + ValueTransformer.TransformerContext parentContext) { + return new TransformerContext<>(parentContext.holder(), + parentContext.type().getArrayComponentType(), elem, parentContext.fieldName() + "[element]", + parentContext.isClientSync()); + } + + @Override + public Tag serializeNBT(T[] value, ValueTransformer.TransformerContext context) { + ListTag listTag = new ListTag(); + for (T element : value) { + listTag.add(elementTransformer.serializeNBT(element, getInnerElemContext(element, context))); + } + return listTag; + } + + @Override + @SuppressWarnings("unchecked") + public @Nullable T @Nullable [] deserializeNBT(Tag tag, ValueTransformer.TransformerContext context) { + T[] current = context.currentValue(); + ListTag listTag = ValueTransformer.assertTagType(ListTag.class, tag, context); + + if (current == null) { + current = (T[]) Array.newInstance((Class) (context.type().getArrayComponentType().getRawType()), + listTag.size()); + } + + if (listTag.size() != current.length) { + current = Arrays.copyOf(current, listTag.size()); + } + for (int i = 0; i < listTag.size(); i++) { + T result = elementTransformer.deserializeNBT(ValueTransformer.stripLdlibWrapper(listTag.get(i)), + getInnerElemContext(null, context)); + if (result == null) return current; + current[i] = result; + } + return current; + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/SetTransformer.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/SetTransformer.java new file mode 100644 index 00000000000..94c03417653 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/SetTransformer.java @@ -0,0 +1,60 @@ +package com.gregtechceu.gtceu.api.sync_system.data_transformers.collections; + +import com.gregtechceu.gtceu.api.sync_system.data_transformers.ValueTransformer; +import com.gregtechceu.gtceu.api.sync_system.data_transformers.ValueTransformers; + +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.Tag; + +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; +import org.jetbrains.annotations.Nullable; + +import java.lang.reflect.Type; +import java.util.Set; + +public class SetTransformer implements ValueTransformer> { + + private @Nullable ValueTransformer elementTransformer = null; + + @SuppressWarnings("unchecked") + private ValueTransformer getElemTransformer(ValueTransformer.TransformerContext> context) { + if (elementTransformer != null) return elementTransformer; + Type elemType = context.type().getGenericTypeArgs()[0].getRawType(); + var transformer = (ValueTransformer) ValueTransformers.get(elemType); + if (transformer == null) { + throw new IllegalStateException("Sync: Failed to serialize set: Missing transformer for inner type: %s" + .formatted(elemType)); + } + elementTransformer = transformer; + return elementTransformer; + } + + private ValueTransformer.TransformerContext getInnerElemContext(@Nullable T elem, + ValueTransformer.TransformerContext> parentContext) { + return new TransformerContext<>(parentContext.holder(), + parentContext.type().getGenericTypeArgs()[0], elem, parentContext.fieldName() + "[element]", + parentContext.isClientSync()); + } + + @Override + public Tag serializeNBT(Set value, ValueTransformer.TransformerContext> context) { + ListTag tag = new ListTag(); + for (T element : value) { + tag.add(getElemTransformer(context).serializeNBT(element, getInnerElemContext(element, context))); + } + return tag; + } + + @Override + public Set deserializeNBT(Tag tag, ValueTransformer.TransformerContext> context) { + ListTag listTag = ValueTransformer.assertTagType(ListTag.class, tag, context); + var current = context.currentValue(); + if (current != null) current.clear(); + else current = new ObjectOpenHashSet<>(); + for (Tag elementTag : listTag) { + T value = getElemTransformer(context).deserializeNBT(elementTag, getInnerElemContext(null, context)); + if (value != null) current.add(value); + } + return current; + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/package-info.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/package-info.java new file mode 100644 index 00000000000..a184a365619 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/package-info.java @@ -0,0 +1,4 @@ +@NotNullByDefault +package com.gregtechceu.gtceu.api.sync_system.data_transformers.collections; + +import org.jetbrains.annotations.NotNullByDefault; diff --git a/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/CoverBehaviorTransformer.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/gtceu/CoverBehaviorTransformer.java similarity index 50% rename from src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/CoverBehaviorTransformer.java rename to src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/gtceu/CoverBehaviorTransformer.java index d813cff47b3..74e9cb6e3f2 100644 --- a/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/CoverBehaviorTransformer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/gtceu/CoverBehaviorTransformer.java @@ -1,11 +1,10 @@ -package com.gregtechceu.gtceu.syncsystem.data_transformers; +package com.gregtechceu.gtceu.api.sync_system.data_transformers.gtceu; import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.capability.ICoverable; import com.gregtechceu.gtceu.api.cover.CoverBehavior; import com.gregtechceu.gtceu.api.registry.GTRegistries; -import com.gregtechceu.gtceu.syncsystem.ISyncManaged; -import com.gregtechceu.gtceu.syncsystem.IValueTransformer; +import com.gregtechceu.gtceu.api.sync_system.data_transformers.ValueTransformer; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; @@ -15,55 +14,41 @@ import org.jetbrains.annotations.Nullable; -import java.util.Objects; - -public class CoverBehaviorTransformer implements IValueTransformer { - - @Override - public boolean mustProvideObject() { - return true; - } - - @Override - public Tag serializeClientSyncNBT(CoverBehavior value, ISyncManaged holder) { - if (holder instanceof ICoverable coverable) return serialize(value, coverable, true); - return new CompoundTag(); - } +public class CoverBehaviorTransformer implements ValueTransformer { @Override - public Tag serializeNBT(CoverBehavior value, ISyncManaged holder) { - if (holder instanceof ICoverable coverable) return serialize(value, coverable, false); + public Tag serializeNBT(@Nullable CoverBehavior value, + CoverBehaviorTransformer.TransformerContext context) { + if (value != null) { + return serialize(value, context.isClientSync()); + } return new CompoundTag(); } @Override - public CoverBehavior deserializeClientNBT(Tag tag, ISyncManaged holder, @Nullable CoverBehavior currentVal) { - if (tag instanceof CompoundTag compoundTag && holder instanceof ICoverable coverable) - return deserialize(compoundTag, coverable, currentVal, true); - return null; - } - - @Override - public CoverBehavior deserializeNBT(Tag tag, ISyncManaged holder, @Nullable CoverBehavior currentVal) { - if (tag instanceof CompoundTag compoundTag && holder instanceof ICoverable coverable) - return deserialize(compoundTag, coverable, currentVal, false); + public @Nullable CoverBehavior deserializeNBT(Tag tag, + CoverBehaviorTransformer.TransformerContext context) { + var compoundTag = ValueTransformer.assertTagType(CompoundTag.class, tag, context); + if (context.holder() instanceof ICoverable coverable) { + return deserialize(compoundTag, coverable, context.currentValue(), context.isClientSync()); + } + GTCEu.LOGGER.error("Sync: Object attempting to sync cover does not implement ICoverable {}", context); return null; } - private CompoundTag serialize(CoverBehavior cover, ICoverable holder, boolean isSync) { + private CompoundTag serialize(CoverBehavior cover, boolean isSync) { var compound = new CompoundTag(); - if (cover == null) return compound; compound.putInt("side", cover.attachedSide.ordinal()); compound.putString("coverType", cover.coverDefinition.getId().toString()); - CompoundTag serialisedCover = cover.getSyncDataHolder().serializeNBT(isSync); - compound.put("data", serialisedCover); + CompoundTag serializedCover = cover.getSyncDataHolder().serializeNBT(isSync); + compound.put("data", serializedCover); return compound; } - public CoverBehavior deserialize(CompoundTag tag, ICoverable holder, @Nullable CoverBehavior cover, - boolean isSync) { + public @Nullable CoverBehavior deserialize(CompoundTag tag, ICoverable holder, @Nullable CoverBehavior cover, + boolean isSync) { /// Ldlib backwards compat if (tag.contains("payload") && tag.contains("uid")) { tag.putInt("side", tag.getCompound("uid").getInt("side")); @@ -88,14 +73,16 @@ public CoverBehavior deserialize(CompoundTag tag, ICoverable holder, @Nullable C holder.setCoverAtSide(coverReg.createCoverBehavior(holder, side), side); } - Objects.requireNonNull(holder.getCoverAtSide(side)).getSyncDataHolder().deserializeNBT(tag.getCompound("data"), + CoverBehavior newCover = holder.getCoverAtSide(side); + if (newCover == null) return null; + newCover.getSyncDataHolder().deserializeNBT(tag.getCompound("data"), isSync); - if (!isSync && holder.getCoverAtSide(side).getAttachItem() == ItemStack.EMPTY) { + if (!isSync && newCover.getAttachItem() == ItemStack.EMPTY) { GTCEu.LOGGER.error("Invalid cover save state, this should never happen unless loading corrupted data."); holder.setCoverAtSide(null, side); } - return holder.getCoverAtSide(side); + return newCover; } } diff --git a/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/GTRecipeTransformer.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/gtceu/GTRecipeTransformer.java similarity index 87% rename from src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/GTRecipeTransformer.java rename to src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/gtceu/GTRecipeTransformer.java index c2840b40ba0..97dbece53a7 100644 --- a/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/GTRecipeTransformer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/gtceu/GTRecipeTransformer.java @@ -1,10 +1,9 @@ -package com.gregtechceu.gtceu.syncsystem.data_transformers; +package com.gregtechceu.gtceu.api.sync_system.data_transformers.gtceu; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.GTRecipeSerializer; +import com.gregtechceu.gtceu.api.sync_system.data_transformers.ValueTransformer; import com.gregtechceu.gtceu.common.data.GTRecipeTypes; -import com.gregtechceu.gtceu.syncsystem.ISyncManaged; -import com.gregtechceu.gtceu.syncsystem.IValueTransformer; import net.minecraft.client.Minecraft; import net.minecraft.nbt.*; @@ -21,7 +20,7 @@ import java.util.Objects; -public class GTRecipeTransformer implements IValueTransformer { +public class GTRecipeTransformer implements ValueTransformer { private static RecipeManager getRecipeManager() { MinecraftServer server = ServerLifecycleHooks.getCurrentServer(); @@ -33,9 +32,8 @@ private static RecipeManager getRecipeManager() { } @Override - public Tag serializeNBT(GTRecipe value, ISyncManaged holder) { + public Tag serializeNBT(GTRecipe value, ValueTransformer.TransformerContext context) { CompoundTag tag = new CompoundTag(); - if (value == null) return tag; tag.putString("id", value.id.toString()); tag.put("recipe", GTRecipeSerializer.CODEC.encodeStart(NbtOps.INSTANCE, value).result().orElse(new CompoundTag())); @@ -45,7 +43,7 @@ public Tag serializeNBT(GTRecipe value, ISyncManaged holder) { } @Override - public GTRecipe deserializeNBT(Tag tag, ISyncManaged holder, @Nullable GTRecipe currentVal) { + public @Nullable GTRecipe deserializeNBT(Tag tag, ValueTransformer.TransformerContext context) { if (tag instanceof CompoundTag comp && comp.isEmpty()) return null; RecipeManager recipeManager = getRecipeManager(); GTRecipe result = null; diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/gtceu/MonitorGroupTransformer.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/gtceu/MonitorGroupTransformer.java new file mode 100644 index 00000000000..57e1e770937 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/gtceu/MonitorGroupTransformer.java @@ -0,0 +1,56 @@ +package com.gregtechceu.gtceu.api.sync_system.data_transformers.gtceu; + +import com.gregtechceu.gtceu.api.sync_system.data_transformers.ValueTransformer; +import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; +import com.gregtechceu.gtceu.common.machine.multiblock.electric.monitor.MonitorGroup; + +import net.minecraft.core.Direction; +import net.minecraft.nbt.*; + +import org.jetbrains.annotations.Nullable; + +public class MonitorGroupTransformer implements ValueTransformer { + + @Override + public CompoundTag serializeNBT(MonitorGroup value, ValueTransformer.TransformerContext context) { + CompoundTag tag = new CompoundTag(); + tag.putString("name", value.getName()); + ListTag list = new ListTag(); + value.getRelativePositions().forEach(pos -> list.add(NbtUtils.writeBlockPos(pos))); + if (value.getTargetRaw() != null) { + tag.put("targetPos", NbtUtils.writeBlockPos(value.getTargetRaw())); + if (value.getTargetCoverSide() != null) { + tag.putString("targetSide", value.getTargetCoverSide().getSerializedName()); + } + } + tag.put("positions", list); + tag.putInt("dataSlot", value.getDataSlot()); + tag.put("items", value.getItemStackHandler().serializeNBT()); + tag.put("placeholderSlots", value.getPlaceholderSlotsHandler().serializeNBT()); + return tag; + } + + @Override + public @Nullable MonitorGroup deserializeNBT(Tag tag, ValueTransformer.TransformerContext context) { + var compoundTag = ValueTransformer.assertTagType(CompoundTag.class, tag, context); + CustomItemStackHandler handler = new CustomItemStackHandler(), + placeholderSlotsHandler = new CustomItemStackHandler(); + handler.deserializeNBT(compoundTag.getCompound("items")); + placeholderSlotsHandler.deserializeNBT(compoundTag.getCompound("placeholderSlots")); + var group = new MonitorGroup(compoundTag.getString("name"), handler, placeholderSlotsHandler); + ListTag list = compoundTag.getList("positions", Tag.TAG_COMPOUND); + for (int i = 0; i < list.size(); i++) { + group.add(NbtUtils.readBlockPos(list.getCompound(i))); + } + if (compoundTag.contains("targetPos", Tag.TAG_COMPOUND)) { + group.setTarget(NbtUtils.readBlockPos(compoundTag.getCompound("targetPos"))); + if (compoundTag.contains("targetSide", Tag.TAG_STRING)) { + group.setTargetCoverSide(Direction.byName(compoundTag.getString("targetSide"))); + } + if (compoundTag.contains("dataSlot", Tag.TAG_INT)) { + group.setDataSlot(compoundTag.getInt("dataSlot")); + } + } + return group; + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/gtceu/package-info.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/gtceu/package-info.java new file mode 100644 index 00000000000..2f061db0205 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/gtceu/package-info.java @@ -0,0 +1,4 @@ +@NotNullByDefault +package com.gregtechceu.gtceu.api.sync_system.data_transformers.gtceu; + +import org.jetbrains.annotations.NotNullByDefault; diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/package-info.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/package-info.java new file mode 100644 index 00000000000..8fd38c18c21 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/package-info.java @@ -0,0 +1,4 @@ +@NotNullByDefault +package com.gregtechceu.gtceu.api.sync_system.data_transformers; + +import org.jetbrains.annotations.NotNullByDefault; diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/package-info.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/package-info.java new file mode 100644 index 00000000000..1a5718fc355 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/package-info.java @@ -0,0 +1,4 @@ +@NotNullByDefault +package com.gregtechceu.gtceu.api.sync_system; + +import org.jetbrains.annotations.NotNullByDefault; diff --git a/src/main/java/com/gregtechceu/gtceu/api/transfer/fluid/CustomFluidTank.java b/src/main/java/com/gregtechceu/gtceu/api/transfer/fluid/CustomFluidTank.java index 01838eb6ed0..d3cd408ea14 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/transfer/fluid/CustomFluidTank.java +++ b/src/main/java/com/gregtechceu/gtceu/api/transfer/fluid/CustomFluidTank.java @@ -11,8 +11,7 @@ import java.util.function.Predicate; -public class CustomFluidTank extends FluidTank - implements IFluidHandlerModifiable, INBTSerializable { +public class CustomFluidTank extends FluidTank implements IFluidHandlerModifiable, INBTSerializable { @Getter @Setter diff --git a/src/main/java/com/gregtechceu/gtceu/common/blockentity/CableBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/common/blockentity/CableBlockEntity.java index 6b75832d15f..b6787e54fa0 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/blockentity/CableBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/common/blockentity/CableBlockEntity.java @@ -10,12 +10,12 @@ import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.IDataInfoProvider; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.block.CableBlock; import com.gregtechceu.gtceu.common.data.GTMaterialBlocks; import com.gregtechceu.gtceu.common.item.PortableScannerBehavior; import com.gregtechceu.gtceu.common.pipelike.cable.*; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTMath; import com.gregtechceu.gtceu.utils.GTUtil; diff --git a/src/main/java/com/gregtechceu/gtceu/common/blockentity/FluidPipeBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/common/blockentity/FluidPipeBlockEntity.java index 1dd3e437560..f4d8c653ed4 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/blockentity/FluidPipeBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/common/blockentity/FluidPipeBlockEntity.java @@ -14,6 +14,7 @@ import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.IDataInfoProvider; import com.gregtechceu.gtceu.api.misc.IOFluidHandlerList; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.transfer.fluid.CustomFluidTank; import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; import com.gregtechceu.gtceu.common.cover.FluidFilterCover; @@ -22,7 +23,6 @@ import com.gregtechceu.gtceu.common.item.PortableScannerBehavior; import com.gregtechceu.gtceu.common.pipelike.fluidpipe.FluidPipeType; import com.gregtechceu.gtceu.common.pipelike.fluidpipe.PipeTankList; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.gregtechceu.gtceu.utils.EntityDamageUtil; import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTTransferUtils; diff --git a/src/main/java/com/gregtechceu/gtceu/common/blockentity/LaserPipeBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/common/blockentity/LaserPipeBlockEntity.java index 7d3c7dd192e..d3dde82340b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/blockentity/LaserPipeBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/common/blockentity/LaserPipeBlockEntity.java @@ -6,9 +6,9 @@ import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.pipenet.IPipeNode; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.pipelike.laser.*; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.GTUtil; import com.gregtechceu.gtceu.utils.TaskHandler; diff --git a/src/main/java/com/gregtechceu/gtceu/common/blockentity/OpticalPipeBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/common/blockentity/OpticalPipeBlockEntity.java index 90454b687bc..142301b164c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/blockentity/OpticalPipeBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/common/blockentity/OpticalPipeBlockEntity.java @@ -7,10 +7,10 @@ import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.pipenet.IPipeNode; import com.gregtechceu.gtceu.api.recipe.GTRecipe; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.pipelike.optical.*; -import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.GTUtil; import com.gregtechceu.gtceu.utils.TaskHandler; diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/ComputerMonitorCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/ComputerMonitorCover.java index 856996b1f92..9a4ef87e2c6 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ComputerMonitorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ComputerMonitorCover.java @@ -12,13 +12,13 @@ import com.gregtechceu.gtceu.api.placeholder.MultiLineComponent; import com.gregtechceu.gtceu.api.placeholder.PlaceholderContext; import com.gregtechceu.gtceu.api.placeholder.PlaceholderHandler; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; import com.gregtechceu.gtceu.client.renderer.cover.CoverTextRenderer; import com.gregtechceu.gtceu.client.renderer.cover.IDynamicCoverRenderer; import com.gregtechceu.gtceu.data.lang.LangHandler; import com.gregtechceu.gtceu.integration.create.GTCreateIntegration; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.GTStringUtils; import com.gregtechceu.gtceu.utils.GTUtil; diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java index b3b684d44cd..bbe95ec05e9 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java @@ -15,13 +15,13 @@ import com.gregtechceu.gtceu.api.gui.widget.EnumSelectorWidget; import com.gregtechceu.gtceu.api.gui.widget.IntInputWidget; import com.gregtechceu.gtceu.api.machine.ConditionalSubscriptionHandler; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.item.ItemHandlerDelegate; import com.gregtechceu.gtceu.common.blockentity.ItemPipeBlockEntity; import com.gregtechceu.gtceu.common.cover.data.DistributionMode; import com.gregtechceu.gtceu.common.cover.data.ManualIOMode; -import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.GTUtil; import com.gregtechceu.gtceu.utils.ItemStackHashStrategy; diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/FacadeCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/FacadeCover.java index 38521c8b008..7c4863297b0 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/FacadeCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/FacadeCover.java @@ -3,10 +3,10 @@ import com.gregtechceu.gtceu.api.capability.ICoverable; import com.gregtechceu.gtceu.api.cover.CoverBehavior; import com.gregtechceu.gtceu.api.cover.CoverDefinition; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.item.FacadeItemBehaviour; -import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/FluidFilterCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/FluidFilterCover.java index d219bf0043e..1c75ae521c8 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/FluidFilterCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/FluidFilterCover.java @@ -6,12 +6,12 @@ import com.gregtechceu.gtceu.api.cover.IUICover; import com.gregtechceu.gtceu.api.cover.filter.FluidFilter; import com.gregtechceu.gtceu.api.gui.widget.EnumSelectorWidget; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.fluid.FluidHandlerDelegate; import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; import com.gregtechceu.gtceu.common.cover.data.FilterMode; import com.gregtechceu.gtceu.common.cover.data.ManualIOMode; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.lowdragmc.lowdraglib.gui.widget.LabelWidget; import com.lowdragmc.lowdraglib.gui.widget.Widget; diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/FluidRegulatorCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/FluidRegulatorCover.java index 0386c3ecaa6..0e63eb3cd2a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/FluidRegulatorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/FluidRegulatorCover.java @@ -7,11 +7,11 @@ import com.gregtechceu.gtceu.api.gui.widget.EnumSelectorWidget; import com.gregtechceu.gtceu.api.gui.widget.IntInputWidget; import com.gregtechceu.gtceu.api.gui.widget.NumberInputWidget; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; import com.gregtechceu.gtceu.common.cover.data.BucketMode; import com.gregtechceu.gtceu.common.cover.data.TransferMode; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java index 4f59093900f..06e6e200e06 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java @@ -9,11 +9,11 @@ import com.gregtechceu.gtceu.api.gui.widget.EnumSelectorWidget; import com.gregtechceu.gtceu.api.machine.MachineCoverContainer; import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.item.ItemHandlerDelegate; import com.gregtechceu.gtceu.common.cover.data.FilterMode; import com.gregtechceu.gtceu.common.cover.data.ManualIOMode; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.lowdragmc.lowdraglib.gui.widget.LabelWidget; import com.lowdragmc.lowdraglib.gui.widget.Widget; diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/MachineControllerCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/MachineControllerCover.java index 873d0d0e232..4fa3d4ea09d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/MachineControllerCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/MachineControllerCover.java @@ -11,10 +11,10 @@ import com.gregtechceu.gtceu.api.gui.widget.PhantomSlotWidget; import com.gregtechceu.gtceu.api.gui.widget.ToggleButtonWidget; import com.gregtechceu.gtceu.api.machine.MachineCoverContainer; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; import com.gregtechceu.gtceu.common.cover.data.ControllerMode; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; import com.lowdragmc.lowdraglib.gui.texture.TextTexture; diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java index 5e386be6ea1..0ebbe5b88cb 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java @@ -15,14 +15,14 @@ import com.gregtechceu.gtceu.api.gui.widget.IntInputWidget; import com.gregtechceu.gtceu.api.gui.widget.NumberInputWidget; import com.gregtechceu.gtceu.api.machine.ConditionalSubscriptionHandler; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.fluid.FluidHandlerDelegate; import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; import com.gregtechceu.gtceu.api.transfer.fluid.ModifiableFluidHandlerWrapper; import com.gregtechceu.gtceu.common.cover.data.BucketMode; import com.gregtechceu.gtceu.common.cover.data.ManualIOMode; -import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.lowdragmc.lowdraglib.gui.widget.LabelWidget; diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java index 2b790a63c8a..911438c8d0f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java @@ -7,10 +7,10 @@ import com.gregtechceu.gtceu.api.cover.filter.SimpleItemFilter; import com.gregtechceu.gtceu.api.gui.widget.EnumSelectorWidget; import com.gregtechceu.gtceu.api.gui.widget.IntInputWidget; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.cover.data.TransferMode; import com.gregtechceu.gtceu.common.pipelike.item.ItemNetHandler; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/ShutterCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/ShutterCover.java index 569885b44ef..ee5a75ba8bc 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ShutterCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ShutterCover.java @@ -4,8 +4,8 @@ import com.gregtechceu.gtceu.api.capability.ICoverable; import com.gregtechceu.gtceu.api.cover.CoverBehavior; import com.gregtechceu.gtceu.api.cover.CoverDefinition; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.Direction; diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/StorageCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/StorageCover.java index f6a5ae609cc..0341ad9c588 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/StorageCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/StorageCover.java @@ -8,9 +8,9 @@ import com.gregtechceu.gtceu.api.gui.fancy.IFancyConfigurator; import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; import com.gregtechceu.gtceu.api.machine.MachineCoverContainer; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; import com.lowdragmc.lowdraglib.gui.widget.LabelWidget; diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/detector/AdvancedEnergyDetectorCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/detector/AdvancedEnergyDetectorCover.java index cab2a6ea64a..20fca500a38 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/detector/AdvancedEnergyDetectorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/detector/AdvancedEnergyDetectorCover.java @@ -8,7 +8,7 @@ import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.widget.LongInputWidget; import com.gregtechceu.gtceu.api.gui.widget.ToggleButtonWidget; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.utils.GTMath; import com.lowdragmc.lowdraglib.gui.widget.LabelWidget; diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/detector/AdvancedFluidDetectorCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/detector/AdvancedFluidDetectorCover.java index da1ffbf696b..86ef201e8f2 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/detector/AdvancedFluidDetectorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/detector/AdvancedFluidDetectorCover.java @@ -9,8 +9,8 @@ import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.widget.IntInputWidget; import com.gregtechceu.gtceu.api.gui.widget.ToggleButtonWidget; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.lowdragmc.lowdraglib.gui.widget.LabelWidget; import com.lowdragmc.lowdraglib.gui.widget.TextBoxWidget; diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/detector/AdvancedItemDetectorCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/detector/AdvancedItemDetectorCover.java index ebcdf65593d..bf6cde4d7f3 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/detector/AdvancedItemDetectorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/detector/AdvancedItemDetectorCover.java @@ -9,8 +9,8 @@ import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.widget.IntInputWidget; import com.gregtechceu.gtceu.api.gui.widget.ToggleButtonWidget; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.RedstoneUtil; import com.lowdragmc.lowdraglib.gui.widget.LabelWidget; diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/detector/DetectorCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/detector/DetectorCover.java index afb5fdde0ff..cfb13b85cd1 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/detector/DetectorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/detector/DetectorCover.java @@ -5,8 +5,8 @@ import com.gregtechceu.gtceu.api.cover.CoverBehavior; import com.gregtechceu.gtceu.api.cover.CoverDefinition; import com.gregtechceu.gtceu.api.machine.TickableSubscription; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.Direction; diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/ender/AbstractEnderLinkCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/ender/AbstractEnderLinkCover.java index afab557e184..9532f234cc1 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ender/AbstractEnderLinkCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ender/AbstractEnderLinkCover.java @@ -18,10 +18,10 @@ import com.gregtechceu.gtceu.api.misc.virtualregistry.VirtualEnderRegistry; import com.gregtechceu.gtceu.api.misc.virtualregistry.VirtualEntry; import com.gregtechceu.gtceu.api.misc.virtualregistry.entries.VirtualTank; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.cover.data.ManualIOMode; -import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.lowdragmc.lowdraglib.gui.editor.ColorPattern; import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/ender/EnderFluidLinkCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/ender/EnderFluidLinkCover.java index 48e6d2cb7ed..3ad32ee9b38 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ender/EnderFluidLinkCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ender/EnderFluidLinkCover.java @@ -11,9 +11,9 @@ import com.gregtechceu.gtceu.api.misc.virtualregistry.VirtualEnderRegistry; import com.gregtechceu.gtceu.api.misc.virtualregistry.VirtualEntry; import com.gregtechceu.gtceu.api.misc.virtualregistry.entries.VirtualTank; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.lowdragmc.lowdraglib.gui.widget.*; diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/ender/EnderItemLinkCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/ender/EnderItemLinkCover.java index 5e5ee4546a0..8338b7e0e40 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ender/EnderItemLinkCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ender/EnderItemLinkCover.java @@ -10,9 +10,9 @@ import com.gregtechceu.gtceu.api.misc.virtualregistry.VirtualEnderRegistry; import com.gregtechceu.gtceu.api.misc.virtualregistry.VirtualEntry; import com.gregtechceu.gtceu.api.misc.virtualregistry.entries.VirtualItemStorage; -import com.gregtechceu.gtceu.syncsystem.SyncDataHolder; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; +import com.gregtechceu.gtceu.api.sync_system.SyncDataHolder; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.lowdragmc.lowdraglib.gui.widget.Widget; diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/ender/EnderRedstoneLinkCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/ender/EnderRedstoneLinkCover.java index ad447928344..d2f3d2c3d6e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ender/EnderRedstoneLinkCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ender/EnderRedstoneLinkCover.java @@ -5,9 +5,9 @@ import com.gregtechceu.gtceu.api.misc.virtualregistry.EntryTypes; import com.gregtechceu.gtceu.api.misc.virtualregistry.VirtualEntry; import com.gregtechceu.gtceu.api.misc.virtualregistry.entries.VirtualRedstone; -import com.gregtechceu.gtceu.syncsystem.SyncDataHolder; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; +import com.gregtechceu.gtceu.api.sync_system.SyncDataHolder; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.lowdragmc.lowdraglib.gui.widget.Widget; import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/AdvancedFluidVoidingCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/AdvancedFluidVoidingCover.java index f42498e8fc8..ffbf5b60de0 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/AdvancedFluidVoidingCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/AdvancedFluidVoidingCover.java @@ -7,11 +7,11 @@ import com.gregtechceu.gtceu.api.gui.widget.EnumSelectorWidget; import com.gregtechceu.gtceu.api.gui.widget.IntInputWidget; import com.gregtechceu.gtceu.api.gui.widget.NumberInputWidget; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; import com.gregtechceu.gtceu.common.cover.data.BucketMode; import com.gregtechceu.gtceu.common.cover.data.VoidingMode; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.GTMath; import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/AdvancedItemVoidingCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/AdvancedItemVoidingCover.java index f61dc5de840..a8ae17034bf 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/AdvancedItemVoidingCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/AdvancedItemVoidingCover.java @@ -6,9 +6,9 @@ import com.gregtechceu.gtceu.api.cover.filter.SimpleItemFilter; import com.gregtechceu.gtceu.api.gui.widget.EnumSelectorWidget; import com.gregtechceu.gtceu.api.gui.widget.IntInputWidget; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.cover.data.VoidingMode; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.GTUtil; import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/PortableScannerBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/PortableScannerBehavior.java index d62b68bea73..39f78a3ea12 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/PortableScannerBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/PortableScannerBehavior.java @@ -15,13 +15,13 @@ import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.RecipeHelper; +import com.gregtechceu.gtceu.api.sync_system.ManagedSyncBlockEntity; import com.gregtechceu.gtceu.common.blockentity.FluidPipeBlockEntity; import com.gregtechceu.gtceu.common.capability.EnvironmentalHazardSavedData; import com.gregtechceu.gtceu.common.capability.LocalizedHazardSavedData; import com.gregtechceu.gtceu.common.data.GTSoundEntries; import com.gregtechceu.gtceu.common.network.GTNetwork; import com.gregtechceu.gtceu.common.network.packets.prospecting.SPacketProspectBedrockFluid; -import com.gregtechceu.gtceu.syncsystem.ManagedSyncBlockEntity; import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTUtil; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BatteryBufferMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BatteryBufferMachine.java index 2a05e2b3b5d..026bc2e7ce6 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BatteryBufferMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BatteryBufferMachine.java @@ -13,9 +13,9 @@ import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; import com.gregtechceu.gtceu.config.ConfigHolder; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.gregtechceu.gtceu.utils.GTUtil; import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BlockBreakerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BlockBreakerMachine.java index 9acde03fe6f..e23dec41b32 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BlockBreakerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BlockBreakerMachine.java @@ -17,12 +17,12 @@ import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.data.lang.LangHandler; -import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.ISubscription; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ChargerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ChargerMachine.java index 92e90d46257..10c2d9e1705 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ChargerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ChargerMachine.java @@ -11,11 +11,11 @@ import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; import com.gregtechceu.gtceu.config.ConfigHolder; -import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.GTUtil; import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java index 02537d249b8..3fed4ad7d57 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java @@ -18,12 +18,12 @@ import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.data.lang.LangHandler; -import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.ISubscription; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/HullMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/HullMachine.java index 8017d8ba498..5eac4c89cb2 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/HullMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/HullMachine.java @@ -7,10 +7,10 @@ import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredPartMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; +import com.gregtechceu.gtceu.api.sync_system.ClassSyncData; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.data_transformers.ValueTransformer; import com.gregtechceu.gtceu.integration.ae2.machine.trait.GridNodeHostTrait; -import com.gregtechceu.gtceu.syncsystem.annotations.CustomDataField; -import com.gregtechceu.gtceu.syncsystem.annotations.FieldDataModifier; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; @@ -21,7 +21,7 @@ import net.minecraft.server.TickTask; import net.minecraft.server.level.ServerLevel; -import appeng.me.helpers.IGridConnectedBlockEntity; +import org.jetbrains.annotations.Nullable; import javax.annotation.ParametersAreNonnullByDefault; @@ -29,7 +29,6 @@ @MethodsReturnNonnullByDefault public class HullMachine extends TieredPartMachine implements IMonitorComponent { - @CustomDataField @SaveField(nbtKey = "grid_node") private final Object gridNodeHost; @@ -79,27 +78,39 @@ public void setFrontFacing(Direction facing) { } } - @FieldDataModifier(fieldName = "gridNodeHost", target = FieldDataModifier.ModifyTarget.SAVE_NBT) - private Tag saveGridNodeHost(Tag saved, boolean saveClientFields) { - if (GTCEu.Mods.isAE2Loaded() && gridNodeHost instanceof IGridConnectedBlockEntity connectedBlockEntity) { - var compound = new CompoundTag(); - connectedBlockEntity.getMainNode().saveToNBT(compound); - return compound; + ////////////////////////////////////// + // ********** Misc **********// + ////////////////////////////////////// + + private static class GridNodeHostTransformer implements ValueTransformer { + + @Override + public Tag serializeNBT(Object value, TransformerContext context) { + if (GTCEu.Mods.isAE2Loaded() && + context.currentValue() instanceof GridNodeHostTrait connectedBlockEntity) { + var compound = new CompoundTag(); + connectedBlockEntity.getMainNode().saveToNBT(compound); + return compound; + } + return new CompoundTag(); } - return saved; - } - @FieldDataModifier(fieldName = "gridNodeHost", target = FieldDataModifier.ModifyTarget.LOAD_NBT) - private void loadGridNodeHost(Tag saved, boolean readClientFields) { - if (GTCEu.Mods.isAE2Loaded() && gridNodeHost instanceof IGridConnectedBlockEntity connectedBlockEntity && - saved instanceof CompoundTag tag) { - connectedBlockEntity.getMainNode().loadFromNBT(tag); + @Override + public @Nullable Object deserializeNBT(Tag tag, TransformerContext context) { + if (GTCEu.Mods.isAE2Loaded() && + context.currentValue() instanceof GridNodeHostTrait connectedBlockEntity && + tag instanceof CompoundTag c) { + connectedBlockEntity.getMainNode().loadFromNBT(c); + return context.currentValue(); + } + return null; } } - ////////////////////////////////////// - // ********** Misc **********// - ////////////////////////////////////// + static { + ClassSyncData.getClassData(HullMachine.class).setCustomTransformerForField("gridNodeHost", + new GridNodeHostTransformer()); + } @Override public int tintColor(int index) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ItemCollectorMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ItemCollectorMachine.java index 82e33277732..08abbb811d7 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ItemCollectorMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ItemCollectorMachine.java @@ -20,13 +20,13 @@ import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; import com.gregtechceu.gtceu.common.data.GTItems; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.data.lang.LangHandler; -import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.ISubscription; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/MinerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/MinerMachine.java index be617b2b03e..6b278a6ebe8 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/MinerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/MinerMachine.java @@ -15,14 +15,14 @@ import com.gregtechceu.gtceu.api.machine.feature.IAutoOutputItem; import com.gregtechceu.gtceu.api.machine.feature.IDataInfoProvider; import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; import com.gregtechceu.gtceu.common.item.PortableScannerBehavior; import com.gregtechceu.gtceu.common.machine.trait.miner.MinerLogic; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.data.lang.LangHandler; -import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.ISubscription; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/PumpMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/PumpMachine.java index b93dc476bcd..a187bc42868 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/PumpMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/PumpMachine.java @@ -13,10 +13,10 @@ import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; import com.gregtechceu.gtceu.api.machine.feature.IUIMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.data.GTBlocks; -import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.lowdragmc.lowdraglib.gui.modular.ModularUI; import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/TransformerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/TransformerMachine.java index c6965a2844a..ee341176a5b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/TransformerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/TransformerMachine.java @@ -6,9 +6,9 @@ import com.gregtechceu.gtceu.api.machine.TieredEnergyMachine; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; -import com.gregtechceu.gtceu.syncsystem.annotations.ClientFieldChangeListener; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; +import com.gregtechceu.gtceu.api.sync_system.annotations.ClientFieldChangeListener; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.Direction; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/WorldAcceleratorMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/WorldAcceleratorMachine.java index 655c5473f71..f8c36980058 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/WorldAcceleratorMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/WorldAcceleratorMachine.java @@ -13,10 +13,10 @@ import com.gregtechceu.gtceu.api.machine.TieredEnergyMachine; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.config.ConfigHolder; -import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.GTUtil; import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/AssemblyLineMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/AssemblyLineMachine.java index 257a77b6ddb..8e07f34aa8f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/AssemblyLineMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/AssemblyLineMachine.java @@ -18,8 +18,8 @@ import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.RecipeHelper; import com.gregtechceu.gtceu.api.recipe.ingredient.FluidIngredient; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.config.ConfigHolder; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.world.item.ItemStack; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CentralMonitorMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CentralMonitorMachine.java index c3496e2dabc..b0827e23796 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CentralMonitorMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CentralMonitorMachine.java @@ -20,6 +20,9 @@ import com.gregtechceu.gtceu.api.misc.EnergyContainerList; import com.gregtechceu.gtceu.api.pattern.*; import com.gregtechceu.gtceu.api.pattern.util.RelativeDirection; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.data.GTBlocks; import com.gregtechceu.gtceu.common.data.GTMachines; import com.gregtechceu.gtceu.common.item.PortableScannerBehavior; @@ -28,9 +31,6 @@ import com.gregtechceu.gtceu.common.network.GTNetwork; import com.gregtechceu.gtceu.common.network.packets.SCPacketMonitorGroupNBTChange; import com.gregtechceu.gtceu.data.lang.LangHandler; -import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.GTStringUtils; import com.gregtechceu.gtceu.utils.GTUtil; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java index c0dc3465dbf..926805a98db 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java @@ -25,6 +25,7 @@ import com.gregtechceu.gtceu.api.pattern.FactoryBlockPattern; import com.gregtechceu.gtceu.api.pattern.Predicates; import com.gregtechceu.gtceu.api.pattern.TraceabilityPredicate; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.common.data.GTBlocks; import com.gregtechceu.gtceu.common.data.GTMachines; import com.gregtechceu.gtceu.common.item.PortableScannerBehavior; @@ -38,7 +39,6 @@ import com.gregtechceu.gtceu.common.machine.trait.CleanroomLogic; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.data.recipe.CustomTags; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.gregtechceu.gtceu.utils.GTUtil; import com.lowdragmc.lowdraglib.utils.BlockInfo; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/DistillationTowerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/DistillationTowerMachine.java index b7417d417a5..b0ad0b7bf7c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/DistillationTowerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/DistillationTowerMachine.java @@ -16,9 +16,9 @@ import com.gregtechceu.gtceu.api.recipe.content.ContentModifier; import com.gregtechceu.gtceu.api.recipe.ingredient.FluidIngredient; import com.gregtechceu.gtceu.api.recipe.modifier.ParallelLogic; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.data.GTRecipeTypes; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.network.chat.Component; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FusionReactorMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FusionReactorMachine.java index bf568983ae8..11331b040d7 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FusionReactorMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FusionReactorMachine.java @@ -19,9 +19,9 @@ import com.gregtechceu.gtceu.api.recipe.RecipeHelper; import com.gregtechceu.gtceu.api.recipe.modifier.ModifierFunction; import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifier; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.block.FusionCasingBlock; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTUtil; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/MultiblockTankMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/MultiblockTankMachine.java index ac429798ab4..2e71fb67cac 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/MultiblockTankMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/MultiblockTankMachine.java @@ -8,8 +8,8 @@ import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.lowdragmc.lowdraglib.gui.widget.ImageWidget; import com.lowdragmc.lowdraglib.gui.widget.LabelWidget; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/PowerSubstationMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/PowerSubstationMachine.java index 413eb181e78..2aaebf9fc9d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/PowerSubstationMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/PowerSubstationMachine.java @@ -21,8 +21,8 @@ import com.gregtechceu.gtceu.api.machine.trait.MachineTraitType; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.misc.EnergyContainerList; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.config.ConfigHolder; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.gregtechceu.gtceu.utils.FormattingUtil; import com.lowdragmc.lowdraglib.gui.modular.ModularUI; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/gcym/LargeChemicalBathMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/gcym/LargeChemicalBathMachine.java index d58724da7ed..6f3a228bc43 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/gcym/LargeChemicalBathMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/gcym/LargeChemicalBathMachine.java @@ -4,8 +4,8 @@ import com.gregtechceu.gtceu.api.machine.feature.multiblock.IFluidRenderMulti; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; import com.gregtechceu.gtceu.api.pattern.util.RelativeDirection; -import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/gcym/LargeMixerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/gcym/LargeMixerMachine.java index 6f6fb3dde19..047d3e55f65 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/gcym/LargeMixerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/gcym/LargeMixerMachine.java @@ -4,8 +4,8 @@ import com.gregtechceu.gtceu.api.machine.feature.multiblock.IFluidRenderMulti; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; import com.gregtechceu.gtceu.api.pattern.util.RelativeDirection; -import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java index 833bd7f5ea8..32d0561fcba 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java @@ -17,12 +17,12 @@ import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.misc.EnergyContainerList; import com.gregtechceu.gtceu.api.pattern.util.RelativeDirection; +import com.gregtechceu.gtceu.api.sync_system.ISyncManaged; +import com.gregtechceu.gtceu.api.sync_system.SyncDataHolder; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.fluid.FluidHandlerList; import com.gregtechceu.gtceu.config.ConfigHolder; -import com.gregtechceu.gtceu.syncsystem.ISyncManaged; -import com.gregtechceu.gtceu.syncsystem.SyncDataHolder; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.GTUtil; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeCombustionEngineMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeCombustionEngineMachine.java index 4895b47a172..0d181339977 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeCombustionEngineMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeCombustionEngineMachine.java @@ -19,9 +19,9 @@ import com.gregtechceu.gtceu.api.recipe.modifier.ModifierFunction; import com.gregtechceu.gtceu.api.recipe.modifier.ParallelLogic; import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifier; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.data.recipe.builder.GTRecipeBuilder; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTMath; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DataAccessHatchMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DataAccessHatchMachine.java index 20a8bce9a08..9ba2dd0c71e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DataAccessHatchMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DataAccessHatchMachine.java @@ -15,11 +15,11 @@ import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredPartMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; import com.gregtechceu.gtceu.api.recipe.GTRecipe; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.common.data.GTRecipeTypes; import com.gregtechceu.gtceu.common.item.PortableScannerBehavior; import com.gregtechceu.gtceu.common.machine.multiblock.electric.research.DataBankMachine; import com.gregtechceu.gtceu.common.recipe.condition.ResearchCondition; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.gregtechceu.gtceu.utils.ItemStackHashStrategy; import com.gregtechceu.gtceu.utils.ResearchManager; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DiodePartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DiodePartMachine.java index 3b3beef6c15..96a0d8dc021 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DiodePartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DiodePartMachine.java @@ -6,9 +6,9 @@ import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredIOPartMachine; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; -import com.gregtechceu.gtceu.syncsystem.annotations.ClientFieldChangeListener; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; +import com.gregtechceu.gtceu.api.sync_system.annotations.ClientFieldChangeListener; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.Direction; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DualHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DualHatchPartMachine.java index 909b4a9a656..910ef071f66 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DualHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DualHatchPartMachine.java @@ -7,8 +7,8 @@ import com.gregtechceu.gtceu.api.gui.widget.TankWidget; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.common.data.GTMachines; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.ISubscription; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/EnergyHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/EnergyHatchPartMachine.java index 29ffd939eba..760589bb07b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/EnergyHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/EnergyHatchPartMachine.java @@ -7,8 +7,8 @@ import com.gregtechceu.gtceu.api.machine.feature.IExplosionMachine; import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredIOPartMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.config.ConfigHolder; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.world.InteractionHand; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java index 3aca8446e80..496ed12bf64 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java @@ -17,11 +17,11 @@ import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredIOPartMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.data.GTMachines; import com.gregtechceu.gtceu.common.item.IntCircuitBehaviour; import com.gregtechceu.gtceu.config.ConfigHolder; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.ISubscription; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java index eec3a639adb..e6306d10891 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java @@ -15,12 +15,11 @@ import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiController; import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredIOPartMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.data.GTMachines; import com.gregtechceu.gtceu.common.item.IntCircuitBehaviour; import com.gregtechceu.gtceu.config.ConfigHolder; -import com.gregtechceu.gtceu.syncsystem.annotations.FieldDataModifier; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.ISubscription; @@ -31,8 +30,6 @@ import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.Tag; import net.minecraft.server.TickTask; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.InteractionHand; @@ -178,16 +175,6 @@ public int tintColor(int index) { return -1; } - @FieldDataModifier(fieldName = "inventory", target = FieldDataModifier.ModifyTarget.LOAD_NBT) - private void checkInventoryNBTCompat(Tag tag, boolean loadClientFields) { - if (tag instanceof CompoundTag compound) { - // todo: delete for 1.8 - // fix to preserve distinctness from pre 1.7 versions - isDistinct = compound.getBoolean("isDistinct"); - - } - } - public void setCircuitSlotEnabled(boolean enabled) { circuitSlotEnabled = enabled; syncDataHolder.markClientSyncFieldDirty("circuitSlotEnabled"); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/LaserHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/LaserHatchPartMachine.java index 3033d1d2f57..27d21392633 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/LaserHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/LaserHatchPartMachine.java @@ -6,8 +6,8 @@ import com.gregtechceu.gtceu.api.machine.feature.IDataInfoProvider; import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredIOPartMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableLaserContainer; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.common.item.PortableScannerBehavior; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import net.minecraft.network.chat.Component; import net.minecraft.world.InteractionHand; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MaintenanceHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MaintenanceHatchPartMachine.java index 079a41e05c6..61200cbbe0d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MaintenanceHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MaintenanceHatchPartMachine.java @@ -14,10 +14,10 @@ import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredPartMachine; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; import com.gregtechceu.gtceu.common.data.GTItems; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.FormattingUtil; import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MufflerPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MufflerPartMachine.java index 4b201fa41ad..1589d8b3732 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MufflerPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MufflerPartMachine.java @@ -11,8 +11,8 @@ import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMufflerMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiController; import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredPartMachine; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.gregtechceu.gtceu.utils.GTUtil; import com.lowdragmc.lowdraglib.gui.modular.ModularUI; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ObjectHolderMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ObjectHolderMachine.java index c5fa4fb21c6..f9c3b37191a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ObjectHolderMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ObjectHolderMachine.java @@ -12,9 +12,9 @@ import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; import com.gregtechceu.gtceu.api.machine.multiblock.part.MultiblockPartMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.lowdragmc.lowdraglib.gui.widget.ImageWidget; import com.lowdragmc.lowdraglib.gui.widget.Widget; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ParallelHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ParallelHatchPartMachine.java index bdd02823a82..606b4609c6e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ParallelHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ParallelHatchPartMachine.java @@ -8,7 +8,7 @@ import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiController; import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredPartMachine; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.lowdragmc.lowdraglib.gui.widget.Widget; import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java index 63bb0365b31..0002d4648e9 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java @@ -13,11 +13,11 @@ import com.gregtechceu.gtceu.api.machine.feature.multiblock.*; import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredPartMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.data.GTDamageTypes; import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.common.item.TurbineRotorBehaviour; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.ISubscription; import com.lowdragmc.lowdraglib.gui.widget.Widget; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCAComponentPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCAComponentPartMachine.java index 13958d8de16..8506fb1d581 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCAComponentPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/hpca/HPCAComponentPartMachine.java @@ -5,11 +5,11 @@ import com.gregtechceu.gtceu.api.machine.feature.IMachineModifyDrops; import com.gregtechceu.gtceu.api.machine.multiblock.part.MultiblockPartMachine; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; import com.gregtechceu.gtceu.common.data.GTBlocks; -import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.world.InteractionHand; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/monitor/AdvancedMonitorPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/monitor/AdvancedMonitorPartMachine.java index 382858b1e6f..786c5601cf4 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/monitor/AdvancedMonitorPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/monitor/AdvancedMonitorPartMachine.java @@ -4,7 +4,7 @@ import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.IInteractedMachine; import com.gregtechceu.gtceu.api.pattern.util.RelativeDirection; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CharcoalPileIgniterMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CharcoalPileIgniterMachine.java index 36ec8c2fc7e..c1daf9ad56e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CharcoalPileIgniterMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CharcoalPileIgniterMachine.java @@ -11,10 +11,10 @@ import com.gregtechceu.gtceu.api.pattern.Predicates; import com.gregtechceu.gtceu.api.pattern.TraceabilityPredicate; import com.gregtechceu.gtceu.api.pattern.util.RelativeDirection; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.data.GTBlocks; import com.gregtechceu.gtceu.common.item.tool.behavior.LighterBehavior; import com.gregtechceu.gtceu.data.recipe.CustomTags; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.lowdragmc.lowdraglib.utils.BlockInfo; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveBlastFurnaceMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveBlastFurnaceMachine.java index b21066aeeb0..292be3ff768 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveBlastFurnaceMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveBlastFurnaceMachine.java @@ -13,9 +13,9 @@ import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.pattern.util.RelativeDirection; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.config.ConfigHolder; -import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.GTUtil; import com.lowdragmc.lowdraglib.gui.modular.ModularUI; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveWorkableMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveWorkableMachine.java index 66c1086ec72..f27bdc427fc 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveWorkableMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveWorkableMachine.java @@ -9,7 +9,7 @@ import com.gregtechceu.gtceu.api.machine.multiblock.WorkableMultiblockMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraftforge.fluids.FluidType; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/LargeBoilerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/LargeBoilerMachine.java index 83406826027..dd5c477e765 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/LargeBoilerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/LargeBoilerMachine.java @@ -15,10 +15,10 @@ import com.gregtechceu.gtceu.api.recipe.ingredient.FluidIngredient; import com.gregtechceu.gtceu.api.recipe.modifier.ModifierFunction; import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifier; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.config.ConfigHolder; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; import com.lowdragmc.lowdraglib.gui.util.ClickData; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamLiquidBoilerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamLiquidBoilerMachine.java index aacc33ffdaa..77ce4bf4d2d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamLiquidBoilerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamLiquidBoilerMachine.java @@ -7,8 +7,8 @@ import com.gregtechceu.gtceu.api.gui.widget.TankWidget; import com.gregtechceu.gtceu.api.machine.steam.SteamBoilerMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.config.ConfigHolder; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.lowdragmc.lowdraglib.gui.modular.ModularUI; import com.lowdragmc.lowdraglib.gui.texture.ProgressTexture; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java index a0938438df9..a4d45488261 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java @@ -12,10 +12,10 @@ import com.gregtechceu.gtceu.api.machine.feature.*; import com.gregtechceu.gtceu.api.machine.steam.SteamWorkableMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.item.PortableScannerBehavior; import com.gregtechceu.gtceu.common.machine.trait.miner.SteamMinerLogic; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.ISubscription; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolidBoilerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolidBoilerMachine.java index 58492063ae8..667b50e615f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolidBoilerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolidBoilerMachine.java @@ -11,9 +11,9 @@ import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; import com.gregtechceu.gtceu.api.machine.steam.SteamBoilerMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.config.ConfigHolder; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.lowdragmc.lowdraglib.gui.modular.ModularUI; import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/BufferMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/BufferMachine.java index f0f4fdc9eb9..710259ffa32 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/BufferMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/BufferMachine.java @@ -13,9 +13,9 @@ import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; -import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.ISubscription; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CrateMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CrateMachine.java index 41106c0e0bb..6b4bf1104a8 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CrateMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CrateMachine.java @@ -10,10 +10,10 @@ import com.gregtechceu.gtceu.api.machine.feature.*; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.data.GTItems; -import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.lowdragmc.lowdraglib.gui.modular.ModularUI; import com.lowdragmc.lowdraglib.gui.widget.LabelWidget; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeChestMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeChestMachine.java index 3bc46471d5f..daef71a5ae5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeChestMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeChestMachine.java @@ -5,7 +5,7 @@ import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.widget.PhantomSlotWidget; import com.gregtechceu.gtceu.api.machine.MetaMachine; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.utils.GTUtil; import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeComputationProviderMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeComputationProviderMachine.java index 28a6669cb3f..a036dbc4db6 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeComputationProviderMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeComputationProviderMachine.java @@ -6,7 +6,7 @@ import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.IUIMachine; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.lowdragmc.lowdraglib.gui.modular.ModularUI; import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeEnergyContainerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeEnergyContainerMachine.java index 016cc63bf87..0d01cb995ed 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeEnergyContainerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeEnergyContainerMachine.java @@ -8,7 +8,7 @@ import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.machine.TieredMachine; import com.gregtechceu.gtceu.api.machine.feature.IUIMachine; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.utils.GTUtil; import com.lowdragmc.lowdraglib.gui.editor.ColorPattern; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeTankMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeTankMachine.java index ffdb91938a3..342762674c6 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeTankMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeTankMachine.java @@ -5,8 +5,8 @@ import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.widget.PhantomFluidWidget; import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.transfer.fluid.CustomFluidTank; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; import com.lowdragmc.lowdraglib.gui.texture.ResourceBorderTexture; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/DrumMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/DrumMachine.java index a046eb76f9e..52053fbaed3 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/DrumMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/DrumMachine.java @@ -12,10 +12,10 @@ import com.gregtechceu.gtceu.api.machine.feature.IDropSaveMachine; import com.gregtechceu.gtceu.api.machine.feature.IInteractedMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.config.ConfigHolder; -import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.ISubscription; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/LongDistanceEndpointMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/LongDistanceEndpointMachine.java index fad35a48231..5ab331b46a8 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/LongDistanceEndpointMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/LongDistanceEndpointMachine.java @@ -8,8 +8,8 @@ import com.gregtechceu.gtceu.api.pipenet.longdistance.ILDEndpoint; import com.gregtechceu.gtceu.api.pipenet.longdistance.LongDistanceNetwork; import com.gregtechceu.gtceu.api.pipenet.longdistance.LongDistancePipeType; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.common.item.PortableScannerBehavior; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.gregtechceu.gtceu.utils.FormattingUtil; import net.minecraft.MethodsReturnNonnullByDefault; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumChestMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumChestMachine.java index 29096b7ff37..1c1ebcbd898 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumChestMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumChestMachine.java @@ -17,11 +17,11 @@ import com.gregtechceu.gtceu.api.machine.feature.IInteractedMachine; import com.gregtechceu.gtceu.api.machine.trait.MachineTrait; import com.gregtechceu.gtceu.api.machine.trait.MachineTraitType; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; -import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTMath; import com.gregtechceu.gtceu.utils.GTTransferUtils; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumTankMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumTankMachine.java index c675f5f3107..4af4e9c4a34 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumTankMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumTankMachine.java @@ -15,11 +15,11 @@ import com.gregtechceu.gtceu.api.machine.feature.IInteractedMachine; import com.gregtechceu.gtceu.api.machine.trait.MachineTrait; import com.gregtechceu.gtceu.api.machine.trait.MachineTraitType; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.fluid.CustomFluidTank; import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; -import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTMath; import com.gregtechceu.gtceu.utils.GTTransferUtils; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/CleanroomLogic.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/CleanroomLogic.java index 65bd2a449e2..873bcb06b78 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/CleanroomLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/CleanroomLogic.java @@ -6,9 +6,9 @@ import com.gregtechceu.gtceu.api.capability.recipe.EURecipeCapability; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMaintenanceMachine; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.common.capability.EnvironmentalHazardSavedData; import com.gregtechceu.gtceu.common.machine.multiblock.electric.CleanroomMachine; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerLevel; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/ConverterTrait.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/ConverterTrait.java index f70d6b98229..f9c6b3e3264 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/ConverterTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/ConverterTrait.java @@ -8,10 +8,10 @@ import com.gregtechceu.gtceu.api.machine.trait.MachineTrait; import com.gregtechceu.gtceu.api.machine.trait.MachineTraitType; import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; +import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.machine.electric.ConverterMachine; -import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import net.minecraftforge.energy.IEnergyStorage; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/miner/LargeMinerLogic.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/miner/LargeMinerLogic.java index 9eae6d74bc6..b87bf0045aa 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/miner/LargeMinerLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/miner/LargeMinerLogic.java @@ -3,7 +3,7 @@ import com.gregtechceu.gtceu.api.data.chemical.ChemicalHelper; import com.gregtechceu.gtceu.api.data.tag.TagPrefix; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/miner/MinerLogic.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/miner/MinerLogic.java index f3e2e5d9f9a..bd52ba3ec2b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/miner/MinerLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/miner/MinerLogic.java @@ -13,12 +13,12 @@ import com.gregtechceu.gtceu.api.misc.ItemRecipeHandler; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.RecipeHelper; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.transfer.item.NotifiableAccountedInvWrapper; import com.gregtechceu.gtceu.common.data.GTBlocks; import com.gregtechceu.gtceu.common.data.GTMaterialItems; import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.config.ConfigHolder; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.GTUtil; diff --git a/src/main/java/com/gregtechceu/gtceu/common/network/GTNetwork.java b/src/main/java/com/gregtechceu/gtceu/common/network/GTNetwork.java index 572360790ed..e0b547c23e8 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/network/GTNetwork.java +++ b/src/main/java/com/gregtechceu/gtceu/common/network/GTNetwork.java @@ -9,7 +9,6 @@ import com.gregtechceu.gtceu.common.network.packets.prospecting.SPacketProspectBedrockFluid; import com.gregtechceu.gtceu.common.network.packets.prospecting.SPacketProspectBedrockOre; import com.gregtechceu.gtceu.common.network.packets.prospecting.SPacketProspectOre; -import com.gregtechceu.gtceu.syncsystem.network.SPacketUpdateBESyncValue; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceKey; @@ -101,8 +100,6 @@ public static void init() { register(CPacketKeyDown.class, CPacketKeyDown::new, NetworkDirection.PLAY_TO_SERVER); - register(SPacketUpdateBESyncValue.class, SPacketUpdateBESyncValue::new, NetworkDirection.PLAY_TO_CLIENT); - register(SPacketSyncOreVeins.class, SPacketSyncOreVeins::new, NetworkDirection.PLAY_TO_CLIENT); register(SPacketSyncFluidVeins.class, SPacketSyncFluidVeins::new, NetworkDirection.PLAY_TO_CLIENT); register(SPacketSyncBedrockOreVeins.class, SPacketSyncBedrockOreVeins::new, NetworkDirection.PLAY_TO_CLIENT); diff --git a/src/main/java/com/gregtechceu/gtceu/common/unification/material/MaterialRegistryManager.java b/src/main/java/com/gregtechceu/gtceu/common/unification/material/MaterialRegistryManager.java index fc4bd957589..88836ecc457 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/unification/material/MaterialRegistryManager.java +++ b/src/main/java/com/gregtechceu/gtceu/common/unification/material/MaterialRegistryManager.java @@ -109,6 +109,11 @@ public Material getMaterial(@NotNull String name) { return GTMaterials.NULL; } + @Override + public Material getMaterial(ResourceLocation resourceLocation) { + return getRegistry(resourceLocation.getNamespace()).get(resourceLocation.getPath()); + } + @Override public ResourceLocation getKey(Material material) { return material.getResourceLocation(); diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEBusPartMachine.java index 56da6c774ca..64c0898150a 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEBusPartMachine.java @@ -3,11 +3,11 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.machine.multiblock.part.ItemBusPartMachine; import com.gregtechceu.gtceu.integration.ae2.machine.feature.IGridConnectedMachine; import com.gregtechceu.gtceu.integration.ae2.machine.trait.GridNodeHolder; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.Direction; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEHatchPartMachine.java index a9ed031e51e..b179089939e 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEHatchPartMachine.java @@ -3,11 +3,11 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.machine.multiblock.part.FluidHatchPartMachine; import com.gregtechceu.gtceu.integration.ae2.machine.feature.IGridConnectedMachine; import com.gregtechceu.gtceu.integration.ae2.machine.trait.GridNodeHolder; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.Direction; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputBusPartMachine.java index 81c764eb977..50632bf3161 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputBusPartMachine.java @@ -6,10 +6,10 @@ import com.gregtechceu.gtceu.api.machine.feature.IInteractedMachine; import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; import com.gregtechceu.gtceu.integration.ae2.gui.widget.list.AEListGridWidget; import com.gregtechceu.gtceu.integration.ae2.utils.KeyStorage; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.lowdragmc.lowdraglib.gui.widget.LabelWidget; import com.lowdragmc.lowdraglib.gui.widget.Widget; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputHatchPartMachine.java index c19c95fa8e2..28bb3c72746 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEOutputHatchPartMachine.java @@ -7,10 +7,10 @@ import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.ingredient.FluidIngredient; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.transfer.fluid.CustomFluidTank; import com.gregtechceu.gtceu.integration.ae2.gui.widget.list.AEListGridWidget; import com.gregtechceu.gtceu.integration.ae2.utils.KeyStorage; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.gregtechceu.gtceu.utils.GTMath; import com.lowdragmc.lowdraglib.gui.widget.LabelWidget; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java index e1993c648f3..eef0e3b0589 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java @@ -18,14 +18,14 @@ import com.gregtechceu.gtceu.api.machine.trait.RecipeHandlerList; import com.gregtechceu.gtceu.api.recipe.ingredient.FluidIngredient; import com.gregtechceu.gtceu.api.recipe.ingredient.SizedIngredient; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; import com.gregtechceu.gtceu.common.data.machines.GTAEMachines; import com.gregtechceu.gtceu.common.item.IntCircuitBehaviour; import com.gregtechceu.gtceu.integration.ae2.gui.widget.AETextInputButtonWidget; import com.gregtechceu.gtceu.integration.ae2.gui.widget.slot.AEPatternViewSlotWidget; import com.gregtechceu.gtceu.integration.ae2.machine.trait.InternalSlotRecipeHandler; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.gregtechceu.gtceu.utils.GTMath; import com.gregtechceu.gtceu.utils.ItemStackHashStrategy; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferProxyPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferProxyPartMachine.java index 564f04a1dad..563a6738e1a 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferProxyPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferProxyPartMachine.java @@ -8,9 +8,9 @@ import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredIOPartMachine; import com.gregtechceu.gtceu.api.machine.trait.RecipeHandlerList; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.integration.ae2.machine.trait.ProxySlotRecipeHandler; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import com.lowdragmc.lowdraglib.gui.modular.ModularUI; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingBusPartMachine.java index 2d79e13525e..1d226f14e4a 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingBusPartMachine.java @@ -8,6 +8,8 @@ import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiController; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.item.IntCircuitBehaviour; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.integration.ae2.machine.feature.multiblock.IMEStockingPart; @@ -15,8 +17,6 @@ import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAEItemSlot; import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAESlot; import com.gregtechceu.gtceu.integration.ae2.slot.IConfigurableSlotList; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.Direction; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingHatchPartMachine.java index 510d1bcb14b..f2d90c8cc96 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingHatchPartMachine.java @@ -8,6 +8,8 @@ import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiController; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.item.IntCircuitBehaviour; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.integration.ae2.machine.feature.multiblock.IMEStockingPart; @@ -16,8 +18,6 @@ import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAESlot; import com.gregtechceu.gtceu.integration.ae2.slot.IConfigurableSlotList; import com.gregtechceu.gtceu.integration.ae2.utils.AEUtil; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; -import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.Direction; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/trait/GridNodeHolder.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/trait/GridNodeHolder.java index eb5b2dce6db..2e029915798 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/trait/GridNodeHolder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/trait/GridNodeHolder.java @@ -2,10 +2,10 @@ import com.gregtechceu.gtceu.api.machine.trait.MachineTrait; import com.gregtechceu.gtceu.api.machine.trait.MachineTraitType; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.integration.ae2.machine.feature.IGridConnectedMachine; import com.gregtechceu.gtceu.integration.ae2.utils.SerializableManagedGridNode; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import net.minecraft.core.Direction; import net.minecraft.server.TickTask; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/slot/ExportOnlyAEFluidList.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/slot/ExportOnlyAEFluidList.java index ce1c187a51d..76026260b40 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/slot/ExportOnlyAEFluidList.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/slot/ExportOnlyAEFluidList.java @@ -3,8 +3,8 @@ import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.transfer.fluid.CustomFluidTank; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import net.minecraftforge.fluids.FluidStack; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/slot/ExportOnlyAEItemList.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/slot/ExportOnlyAEItemList.java index 3949d9dfcd6..e99ba20466b 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/slot/ExportOnlyAEItemList.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/slot/ExportOnlyAEItemList.java @@ -4,8 +4,8 @@ import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; import com.gregtechceu.gtceu.api.recipe.GTRecipe; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; -import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; diff --git a/src/main/java/com/gregtechceu/gtceu/syncsystem/ClassSyncData.java b/src/main/java/com/gregtechceu/gtceu/syncsystem/ClassSyncData.java deleted file mode 100644 index 85d2b4fe52e..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/syncsystem/ClassSyncData.java +++ /dev/null @@ -1,155 +0,0 @@ -package com.gregtechceu.gtceu.syncsystem; - -import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.syncsystem.annotations.*; -import com.gregtechceu.gtceu.syncsystem.data_transformers.ValueTransformers; - -import it.unimi.dsi.fastutil.objects.Object2ObjectMap; -import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; -import org.jetbrains.annotations.NotNull; - -import java.lang.invoke.MethodHandle; -import java.lang.invoke.MethodHandles; -import java.lang.invoke.VarHandle; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.*; - -/** - * Static data for {@link ISyncManaged} classes. - */ -public final class ClassSyncData { - - private static final MethodHandles.Lookup LOOKUP = MethodHandles.lookup(); - public static final ClassValue CACHE = new ClassValue<>() { - - @Override - protected ClassSyncData computeValue(@NotNull Class type) { - return new ClassSyncData(type); - } - }; - - public final Object2ObjectMap clientSyncFields = new Object2ObjectOpenHashMap<>(); - public final Object2ObjectMap serverSaveFields = new Object2ObjectOpenHashMap<>(); - - private ClassSyncData(@NotNull Class clazz) { - MethodHandles.Lookup privateLookup; - try { - privateLookup = MethodHandles.privateLookupIn(clazz, LOOKUP); - } catch (IllegalAccessException e) { - GTCEu.LOGGER.error("Sync: Failed to create method handle lookup for class {}", clazz); - GTCEu.LOGGER.error(e.getMessage()); - return; - } - - Map annotatedMethods = new HashMap<>(); - - for (Method method : clazz.getDeclaredMethods()) { - ClientFieldChangeListener listener = method.getAnnotation(ClientFieldChangeListener.class); - FieldDataModifier modifier = method.getAnnotation(FieldDataModifier.class); - if (listener == null && modifier == null) continue; - if (listener != null && modifier != null) throw new IllegalArgumentException( - "Methods cannot be annotated with both @ClientFieldChangeListener and @FieldDataModifier: %s.%s" - .formatted(clazz.getCanonicalName(), method.getName())); - if (Modifier.isStatic(method.getModifiers())) - throw new IllegalArgumentException("Cannot apply syncdata annotation to static method: %s.%s" - .formatted(clazz.getCanonicalName(), method.getName())); - - MethodHandle handle; - try { - handle = privateLookup.unreflect(method); - } catch (IllegalAccessException e) { - GTCEu.LOGGER.error("Sync: Failed to acquire method handle for method {} {}", method.getName(), - clazz.getCanonicalName()); - GTCEu.LOGGER.error(e.getMessage()); - continue; - } - - String fieldName = listener != null ? listener.fieldName() : modifier.fieldName(); - annotatedMethods.putIfAbsent(fieldName, - new MethodInfo(new ArrayList<>(), new ArrayList<>(), new ArrayList<>())); - if (listener != null) annotatedMethods.get(fieldName).listeners.add(handle); - else if (modifier.target() == FieldDataModifier.ModifyTarget.LOAD_NBT) - annotatedMethods.get(fieldName).nbtLoaders.add(handle); - else if (modifier.target() == FieldDataModifier.ModifyTarget.SAVE_NBT) - annotatedMethods.get(fieldName).nbtSavers.add(handle); - } - - for (Field field : clazz.getDeclaredFields()) { - boolean hasSaveField = field.isAnnotationPresent(SaveField.class); - boolean hasClientSync = field.isAnnotationPresent(SyncToClient.class); - if (!hasSaveField && !hasClientSync) continue; - if (Modifier.isStatic(field.getModifiers())) - throw new IllegalArgumentException("Cannot apply syncdata annotations to static field: %s.%s" - .formatted(clazz.getCanonicalName(), field.getName())); - - VarHandle handle; - try { - handle = privateLookup.unreflectVarHandle(field); - } catch (IllegalAccessException e) { - GTCEu.LOGGER.error("Sync: Failed to acquire variable handle for field {} {}", field.getName(), - clazz.getCanonicalName()); - GTCEu.LOGGER.error(e.getMessage()); - continue; - } - - FieldSyncData syncData = new FieldSyncData(field, handle, annotatedMethods.get(field.getName())); - if (hasClientSync) clientSyncFields.put(field.getName(), syncData); - if (hasSaveField) serverSaveFields.put(field.getName(), syncData); - } - - Class parent = clazz.getSuperclass(); - if (parent != Object.class) { - ClassSyncData parentHandles = CACHE.get(parent); - clientSyncFields.putAll(parentHandles.clientSyncFields); - serverSaveFields.putAll(parentHandles.serverSaveFields); - } - } - - public static final class FieldSyncData { - - public final String fieldName, nbtSaveKey; - public final VarHandle handle; - public final boolean triggerClientRerender, isCustomData, isComplex; - public final IValueTransformer transformer; - public final MethodHandle[] changeListenerHandles, nbtSaveModifiers, nbtLoadModifiers; - - public FieldSyncData(@NotNull Field field, @NotNull VarHandle handle, MethodInfo appliedMethods) { - this.fieldName = field.getName(); - this.handle = handle; - SaveField savedField = field.getAnnotation(SaveField.class); - this.nbtSaveKey = (savedField != null && !savedField.nbtKey().isBlank()) ? savedField.nbtKey() : fieldName; - triggerClientRerender = field.isAnnotationPresent(RerenderOnChanged.class); - isCustomData = field.isAnnotationPresent(CustomDataField.class); - isComplex = ISyncManaged.class.isAssignableFrom(field.getType()); - - if (isCustomData && (appliedMethods.nbtSavers.size() != 1 || appliedMethods.nbtLoaders.size() != 1)) - throw new IllegalArgumentException( - "Fields marked with @CustomDataField must have exactly one SAVE_NBT FieldDataModifier and one LOAD_NBT FieldDataModifier: %s.%s" - .formatted(field.getClass().getCanonicalName(), fieldName)); - - if (!isCustomData) { - IValueTransformer collectionTransformer = ValueTransformers.getCollectionTransformer(field); - if (collectionTransformer == null) { - transformer = ValueTransformers.get(field.getType()); - } else { - transformer = collectionTransformer; - } - } else transformer = null; - - if (appliedMethods != null) { - changeListenerHandles = appliedMethods.listeners.toArray(MethodHandle[]::new); - nbtSaveModifiers = appliedMethods.nbtSavers.toArray(MethodHandle[]::new); - nbtLoadModifiers = appliedMethods.nbtLoaders.toArray(MethodHandle[]::new); - } else { - changeListenerHandles = new MethodHandle[0]; - nbtSaveModifiers = new MethodHandle[0]; - nbtLoadModifiers = new MethodHandle[0]; - } - } - } - - public record MethodInfo(List listeners, List nbtLoaders, - List nbtSavers) {} -} diff --git a/src/main/java/com/gregtechceu/gtceu/syncsystem/IValueTransformer.java b/src/main/java/com/gregtechceu/gtceu/syncsystem/IValueTransformer.java deleted file mode 100644 index dd38527a888..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/syncsystem/IValueTransformer.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.gregtechceu.gtceu.syncsystem; - -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.Tag; - -import org.jetbrains.annotations.Nullable; - -/** - * Represents an object that provides a set of methods for encoding/decoding a value of type {@code } into a - * {@link Tag} - */ -public interface IValueTransformer { - - static Tag stripLdlibWrapper(Tag t) { - if (!(t instanceof CompoundTag tag)) return t; - if (tag.contains("p") && tag.contains("t")) { - return tag.getCompound("p"); - } - if (tag.contains("t", Tag.TAG_COMPOUND)) { - return tag.getCompound("t").getCompound("p"); - } - return tag; - } - - default boolean mustProvideObject() { - return false; - } - - default Tag serializeClientSyncNBT(@Nullable T value, ISyncManaged holder) { - return serializeNBT(value, holder); - } - - default T deserializeClientNBT(Tag tag, ISyncManaged holder, @Nullable T currentVal) { - return deserializeNBT(tag, holder, currentVal); - } - - Tag serializeNBT(T value, ISyncManaged holder); - - T deserializeNBT(Tag tag, ISyncManaged holder, @Nullable T currentVal); -} diff --git a/src/main/java/com/gregtechceu/gtceu/syncsystem/SyncDataHolder.java b/src/main/java/com/gregtechceu/gtceu/syncsystem/SyncDataHolder.java deleted file mode 100644 index ac3b7cbd55c..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/syncsystem/SyncDataHolder.java +++ /dev/null @@ -1,230 +0,0 @@ -package com.gregtechceu.gtceu.syncsystem; - -import com.gregtechceu.gtceu.GTCEu; - -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.Tag; - -import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; -import it.unimi.dsi.fastutil.objects.ObjectSet; -import org.jetbrains.annotations.NotNull; - -import java.lang.invoke.MethodHandle; -import java.lang.invoke.WrongMethodTypeException; -import java.util.*; - -/** - * Class that holds all sync info for an {@link ISyncManaged} object. - */ -public class SyncDataHolder { - - private final ClassSyncData syncData; - private final ISyncManaged holder; - - private final ObjectSet dirtySyncFields = new ObjectOpenHashSet<>(); - private boolean resyncAll = false; - - public SyncDataHolder(@NotNull ISyncManaged o) { - holder = o; - syncData = ClassSyncData.CACHE.get(o.getClass()); - } - - /** - * Instructs the sync system that this field has been updated and must be synced with clients. - * - * @param fieldName The field that has changed. - */ - public void markClientSyncFieldDirty(String fieldName) { - dirtySyncFields.add(fieldName); - holder.markAsChanged(); - } - - public void resyncAllFields() { - resyncAll = true; - holder.markAsChanged(); - } - - public CompoundTag serializeNBT(boolean writeClientFields) { - CompoundTag tag = serializeNBT(writeClientFields, resyncAll); - resyncAll = false; - dirtySyncFields.clear(); - return tag; - } - - public CompoundTag serializeNBT(boolean writeClientFields, boolean fullSync) { - Map fieldsToSerialize; - if (!writeClientFields) { - fieldsToSerialize = syncData.serverSaveFields; - } else { - fieldsToSerialize = syncData.clientSyncFields; - } - - CompoundTag tag = new CompoundTag(); - for (var fieldEntry : fieldsToSerialize.entrySet()) { - - if (writeClientFields && - (!fullSync && !dirtySyncFields.contains(fieldEntry.getKey()) && !fieldEntry.getValue().isComplex)) - continue; - var field = fieldEntry.getValue(); - if (field.isCustomData) { - try { - Object result = field.nbtSaveModifiers[0].invoke(holder, new CompoundTag(), writeClientFields); - tag.put(field.nbtSaveKey, (CompoundTag) result); - } catch (Throwable e) { - GTCEu.LOGGER.error("Sync: Error while invoking nbtSaveModifier for field {}", field.fieldName); - GTCEu.LOGGER.error(e.getMessage()); - return new CompoundTag(); - } - continue; - } - - Tag nbtValue = serialiseField(holder, field, writeClientFields); - - for (MethodHandle modifier : field.nbtSaveModifiers) { - try { - nbtValue = (Tag) modifier.invoke(holder, nbtValue, writeClientFields); - } catch (Throwable e) { - GTCEu.LOGGER.error("Sync: Error while invoking nbtSaveModifier for field {}", field.fieldName); - GTCEu.LOGGER.error(e.getMessage()); - return new CompoundTag(); - } - } - - tag.put(field.nbtSaveKey, nbtValue); - } - return tag; - } - - public void deserializeNBT(CompoundTag tag, boolean readingClientFields) { - Map fieldsToCheck = readingClientFields ? syncData.clientSyncFields : - syncData.serverSaveFields; - - for (var fieldEntry : fieldsToCheck.entrySet()) { - - var field = fieldEntry.getValue(); - - if (field.isCustomData) { - try { - field.nbtLoadModifiers[0].invoke(holder, tag, readingClientFields); - } catch (Throwable e) { - GTCEu.LOGGER.error("Sync: Error while invoking nbtLoadModifier for field {}", field.fieldName); - GTCEu.LOGGER.error(e.getMessage()); - return; - } - continue; - } - - Tag savedValue = tag.get(field.nbtSaveKey); - deserialiseField(holder, field, savedValue, readingClientFields); - - for (MethodHandle modifier : field.nbtLoadModifiers) { - try { - modifier.invoke(holder, savedValue, readingClientFields); - } catch (Throwable e) { - GTCEu.LOGGER.error("Sync: Error while invoking nbtLoadModifier for field {}", field.fieldName); - GTCEu.LOGGER.error(e.getMessage()); - return; - } - } - - if (readingClientFields) { - try { - for (MethodHandle changeListenerHandle : field.changeListenerHandles) { - changeListenerHandle.invoke(holder); - } - } catch (Throwable e) { - if (e instanceof WrongMethodTypeException) { - throw new IllegalArgumentException( - "Invalid method signature for change listener for field %s %s" - .formatted(field.fieldName, holder.getClass().getCanonicalName())); - } - GTCEu.LOGGER.error("Sync: Error while invoking change listener for field {}", field.fieldName); - GTCEu.LOGGER.error(e); - } - - if (field.triggerClientRerender) holder.scheduleRenderUpdate(); - } - } - } - - @SuppressWarnings("unchecked") - private static Tag serialiseField(ISyncManaged holder, ClassSyncData.FieldSyncData field, - boolean writeClientFields) { - Object currentValue = field.handle.get(holder); - - if (!field.isComplex && currentValue == null) { - var nullCompound = new CompoundTag(); - nullCompound.putBoolean("null", true); - return nullCompound; - } - - try { - - if (field.transformer != null) { - if (writeClientFields) { - return ((IValueTransformer) field.transformer).serializeClientSyncNBT(currentValue, holder); - } else { - return ((IValueTransformer) field.transformer).serializeNBT(currentValue, holder); - } - } else if (field.isComplex && currentValue instanceof ISyncManaged syncObj) { - return syncObj.getSyncDataHolder().serializeNBT(writeClientFields); - } - - } catch (Exception e) { - GTCEu.LOGGER.error("Sync: Failed to serialise field {}", field.fieldName); - GTCEu.LOGGER.error(e); - } - - return new CompoundTag(); - } - - @SuppressWarnings("unchecked") - private static void deserialiseField(ISyncManaged holder, ClassSyncData.FieldSyncData field, Tag savedValue, - boolean readingClientFields) { - Object currentVal = field.handle.get(holder); - - if (savedValue == null || savedValue instanceof CompoundTag compound && compound.isEmpty()) return; - - if (savedValue instanceof CompoundTag compound && compound.getBoolean("null")) { - field.handle.set(holder, null); - return; - } - - try { - if (field.transformer != null) { - IValueTransformer transformer = (IValueTransformer) field.transformer; - try { - if (transformer.mustProvideObject()) { - if (readingClientFields) { - transformer.deserializeClientNBT(savedValue, holder, field.handle.get(holder)); - } else { - transformer.deserializeNBT(savedValue, holder, field.handle.get(holder)); - } - } else { - - if (readingClientFields) { - field.handle.set(holder, transformer.deserializeClientNBT(savedValue, holder, null)); - } else { - field.handle.set(holder, transformer.deserializeNBT(savedValue, holder, null)); - } - - } - } catch (UnsupportedOperationException e) { - GTCEu.LOGGER.error("Sync: failed to perform VarHandle set: unsupported op {} {}", - field.fieldName, field.handle.toString()); - } - } else if (field.isComplex && savedValue instanceof CompoundTag compound) { - if (currentVal == null) { - GTCEu.LOGGER.error("Sync: ISyncManaged field was null, cannot instantiate {}", - field.fieldName); - return; - } - if (currentVal instanceof ISyncManaged syncObj) - syncObj.getSyncDataHolder().deserializeNBT(compound, readingClientFields); - } - } catch (Exception e) { - GTCEu.LOGGER.error("Sync: Failed to deserialise field {}", field.fieldName); - GTCEu.LOGGER.error(e); - } - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/syncsystem/annotations/CustomDataField.java b/src/main/java/com/gregtechceu/gtceu/syncsystem/annotations/CustomDataField.java deleted file mode 100644 index 23a97607a84..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/syncsystem/annotations/CustomDataField.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.gregtechceu.gtceu.syncsystem.annotations; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * Instructs the sync system to call a custom data serialisation function - *

- * Two {@link FieldDataModifier} functions must be defined for this field - one save function and one load function - */ -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -public @interface CustomDataField {} diff --git a/src/main/java/com/gregtechceu/gtceu/syncsystem/annotations/FieldDataModifier.java b/src/main/java/com/gregtechceu/gtceu/syncsystem/annotations/FieldDataModifier.java deleted file mode 100644 index bb2c1836620..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/syncsystem/annotations/FieldDataModifier.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.gregtechceu.gtceu.syncsystem.annotations; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * Instructs the sync system to apply this method when saving or loading a field. - */ -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.METHOD) -public @interface FieldDataModifier { - - enum ModifyTarget { - SAVE_NBT, - LOAD_NBT, - } - - /** - * The field that this function applies to. - */ - String fieldName(); - - /** - * If this function is called when saving or loading NBT - */ - ModifyTarget target(); -} diff --git a/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/CustomFluidTankTransformer.java b/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/CustomFluidTankTransformer.java deleted file mode 100644 index 4a15d2804f3..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/CustomFluidTankTransformer.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.gregtechceu.gtceu.syncsystem.data_transformers; - -import com.gregtechceu.gtceu.api.transfer.fluid.CustomFluidTank; -import com.gregtechceu.gtceu.syncsystem.ISyncManaged; -import com.gregtechceu.gtceu.syncsystem.IValueTransformer; - -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.Tag; - -import org.jetbrains.annotations.Nullable; - -public class CustomFluidTankTransformer implements IValueTransformer { - - @Override - public boolean mustProvideObject() { - return true; - } - - @Override - public Tag serializeNBT(CustomFluidTank value, ISyncManaged holder) { - return value.serializeNBT(); - } - - @Override - public CustomFluidTank deserializeNBT(Tag tag, ISyncManaged holder, @Nullable CustomFluidTank currentVal) { - if (currentVal == null) return null; - if (tag instanceof CompoundTag compoundTag) { - - // LDLib compat - if (compoundTag.contains("p") && compoundTag.contains("t")) { - currentVal.deserializeNBT(compoundTag.getCompound("p")); - } else { - currentVal.deserializeNBT(compoundTag); - } - } - return currentVal; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/GTRecipeTypeTransformer.java b/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/GTRecipeTypeTransformer.java deleted file mode 100644 index 3570f8e0021..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/GTRecipeTypeTransformer.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.gregtechceu.gtceu.syncsystem.data_transformers; - -import com.gregtechceu.gtceu.api.recipe.GTRecipeType; -import com.gregtechceu.gtceu.api.registry.GTRegistries; -import com.gregtechceu.gtceu.syncsystem.ISyncManaged; -import com.gregtechceu.gtceu.syncsystem.IValueTransformer; - -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.Tag; -import net.minecraft.resources.ResourceLocation; - -import org.jetbrains.annotations.Nullable; - -public class GTRecipeTypeTransformer implements IValueTransformer { - - @Override - public Tag serializeNBT(GTRecipeType value, ISyncManaged holder) { - var tag = new CompoundTag(); - if (value == null) return tag; - tag.putString("namespace", value.registryName.getNamespace()); - tag.putString("path", value.registryName.getPath()); - return tag; - } - - @Override - public GTRecipeType deserializeNBT(Tag tag, ISyncManaged holder, @Nullable GTRecipeType currentVal) { - if (!(tag instanceof CompoundTag compound) || compound.isEmpty()) return null; - String namespace = compound.getString("namespace"); - String path = compound.getString("path"); - return GTRegistries.RECIPE_TYPES.get(new ResourceLocation(namespace, path)); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/MachineRenderStateTransformer.java b/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/MachineRenderStateTransformer.java deleted file mode 100644 index b77ec1f0d4e..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/MachineRenderStateTransformer.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.gregtechceu.gtceu.syncsystem.data_transformers; - -import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; -import com.gregtechceu.gtceu.syncsystem.ISyncManaged; -import com.gregtechceu.gtceu.syncsystem.IValueTransformer; - -import net.minecraft.nbt.NbtOps; -import net.minecraft.nbt.Tag; - -import org.jetbrains.annotations.Nullable; - -public class MachineRenderStateTransformer implements IValueTransformer { - - @Override - public Tag serializeNBT(MachineRenderState value, ISyncManaged holder) { - return MachineRenderState.CODEC.encodeStart(NbtOps.INSTANCE, value).getOrThrow(false, GTCEu.LOGGER::error); - } - - @Override - public MachineRenderState deserializeNBT(Tag tag, ISyncManaged holder, @Nullable MachineRenderState currentVal) { - return MachineRenderState.CODEC.parse(NbtOps.INSTANCE, tag).getOrThrow(false, GTCEu.LOGGER::error); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/MaterialTransformer.java b/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/MaterialTransformer.java deleted file mode 100644 index 3b5fd82fe59..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/MaterialTransformer.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.gregtechceu.gtceu.syncsystem.data_transformers; - -import com.gregtechceu.gtceu.api.GTCEuAPI; -import com.gregtechceu.gtceu.api.data.chemical.material.Material; -import com.gregtechceu.gtceu.syncsystem.ISyncManaged; -import com.gregtechceu.gtceu.syncsystem.IValueTransformer; - -import net.minecraft.nbt.StringTag; -import net.minecraft.nbt.Tag; - -public class MaterialTransformer implements IValueTransformer { - - @Override - public Tag serializeNBT(Material currentValue, ISyncManaged holder) { - return StringTag.valueOf(currentValue.getResourceLocation().toString()); - } - - @Override - public Material deserializeNBT(Tag tag, ISyncManaged holder, Material currentValue) { - return GTCEuAPI.materialManager.getMaterial(tag.getAsString()); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/MonitorGroupTransformer.java b/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/MonitorGroupTransformer.java deleted file mode 100644 index 2950011debd..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/MonitorGroupTransformer.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.gregtechceu.gtceu.syncsystem.data_transformers; - -import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; -import com.gregtechceu.gtceu.common.machine.multiblock.electric.monitor.MonitorGroup; -import com.gregtechceu.gtceu.syncsystem.ISyncManaged; -import com.gregtechceu.gtceu.syncsystem.IValueTransformer; - -import net.minecraft.core.Direction; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.ListTag; -import net.minecraft.nbt.NbtUtils; -import net.minecraft.nbt.Tag; - -import org.jetbrains.annotations.Nullable; - -public class MonitorGroupTransformer implements IValueTransformer { - - @Override - public CompoundTag serializeNBT(MonitorGroup value, ISyncManaged holder) { - CompoundTag tag = new CompoundTag(); - tag.putString("name", value.getName()); - ListTag list = new ListTag(); - value.getRelativePositions().forEach(pos -> { - list.add(NbtUtils.writeBlockPos(pos)); - }); - if (value.getTargetRaw() != null) { - tag.put("targetPos", NbtUtils.writeBlockPos(value.getTargetRaw())); - if (value.getTargetCoverSide() != null) { - tag.putString("targetSide", value.getTargetCoverSide().getSerializedName()); - } - } - tag.put("positions", list); - tag.putInt("dataSlot", value.getDataSlot()); - tag.put("items", value.getItemStackHandler().serializeNBT()); - tag.put("placeholderSlots", value.getPlaceholderSlotsHandler().serializeNBT()); - return tag; - } - - @Override - public MonitorGroup deserializeNBT(Tag tag, ISyncManaged holder, @Nullable MonitorGroup currentVal) { - if (tag instanceof CompoundTag compoundTag) { - CustomItemStackHandler handler = new CustomItemStackHandler(), - placeholderSlotsHandler = new CustomItemStackHandler(); - handler.deserializeNBT(compoundTag.getCompound("items")); - placeholderSlotsHandler.deserializeNBT(compoundTag.getCompound("placeholderSlots")); - var group = new MonitorGroup(compoundTag.getString("name"), handler, placeholderSlotsHandler); - ListTag list = compoundTag.getList("positions", Tag.TAG_COMPOUND); - for (int i = 0; i < list.size(); i++) { - group.add(NbtUtils.readBlockPos(list.getCompound(i))); - } - if (compoundTag.contains("targetPos", Tag.TAG_COMPOUND)) { - group.setTarget(NbtUtils.readBlockPos(compoundTag.getCompound("targetPos"))); - if (compoundTag.contains("targetSide", Tag.TAG_STRING)) { - group.setTargetCoverSide(Direction.byName(compoundTag.getString("targetSide"))); - } - if (compoundTag.contains("dataSlot", Tag.TAG_INT)) { - group.setDataSlot(compoundTag.getInt("dataSlot")); - } - } - return group; - } - return null; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/NBTSerialisableTransformer.java b/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/NBTSerialisableTransformer.java deleted file mode 100644 index c16075b75aa..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/NBTSerialisableTransformer.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.gregtechceu.gtceu.syncsystem.data_transformers; - -import com.gregtechceu.gtceu.syncsystem.ISyncManaged; -import com.gregtechceu.gtceu.syncsystem.IValueTransformer; - -import net.minecraft.nbt.Tag; -import net.minecraftforge.common.util.INBTSerializable; - -public class NBTSerialisableTransformer implements IValueTransformer> { - - @Override - public boolean mustProvideObject() { - return true; - } - - @Override - public Tag serializeNBT(INBTSerializable value, ISyncManaged holder) { - return value.serializeNBT(); - } - - @Override - public INBTSerializable deserializeNBT(Tag tag, ISyncManaged holder, INBTSerializable currentVal) { - if (currentVal == null) return null; - currentVal.deserializeNBT(tag); - return currentVal; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/ValueTransformers.java b/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/ValueTransformers.java deleted file mode 100644 index 16e2b58291e..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/ValueTransformers.java +++ /dev/null @@ -1,204 +0,0 @@ -package com.gregtechceu.gtceu.syncsystem.data_transformers; - -import com.gregtechceu.gtceu.api.cover.CoverBehavior; -import com.gregtechceu.gtceu.api.data.chemical.material.Material; -import com.gregtechceu.gtceu.api.recipe.GTRecipe; -import com.gregtechceu.gtceu.api.recipe.GTRecipeType; -import com.gregtechceu.gtceu.api.transfer.fluid.CustomFluidTank; -import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; -import com.gregtechceu.gtceu.common.machine.multiblock.electric.monitor.MonitorGroup; -import com.gregtechceu.gtceu.syncsystem.ISyncManaged; -import com.gregtechceu.gtceu.syncsystem.IValueTransformer; -import com.gregtechceu.gtceu.syncsystem.data_transformers.collections.*; - -import net.minecraft.core.BlockPos; -import net.minecraft.nbt.*; -import net.minecraft.network.chat.Component; -import net.minecraft.world.item.ItemStack; -import net.minecraftforge.common.extensions.IForgeItemStack; -import net.minecraftforge.common.util.INBTSerializable; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.lang.reflect.Field; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; -import java.util.function.Function; - -import javax.annotation.ParametersAreNonnullByDefault; - -@ParametersAreNonnullByDefault -public final class ValueTransformers { - - private static final Map, IValueTransformer> REGISTERED = new ConcurrentHashMap<>(); - private static final Map, IValueTransformer> REGISTERED_INTERFACES = new ConcurrentHashMap<>(); - - private static final Map, Class> PRIMITIVE_TO_BOXED = Map.of( - boolean.class, Boolean.class, - byte.class, Byte.class, - char.class, Character.class, - short.class, Short.class, - int.class, Integer.class, - long.class, Long.class, - float.class, Float.class, - double.class, Double.class, - void.class, Void.class); - - public static Class boxIfPrimitive(Class cls) { - return cls.isPrimitive() ? PRIMITIVE_TO_BOXED.get(cls) : cls; - } - - // Logic for determining which IValueTransformer should be used to serialise a value - private static final ClassValue> TRANSFORMERS = new ClassValue<>() { - - @Override - protected IValueTransformer computeValue(@NotNull Class type) { - type = boxIfPrimitive(type); - IValueTransformer tx = REGISTERED.get(type); - if (tx != null) return tx; - IValueTransformer ifaceTx = REGISTERED_INTERFACES.get(type); - if (ifaceTx != null) return ifaceTx; - - if (type.isEnum()) { - @SuppressWarnings("unchecked") - Class> enumClass = (Class>) type; - return new EnumTransformer<>(enumClass); - } - - if (type.isArray()) { - Class componentType = type.getComponentType(); - IValueTransformer componentTx = get(componentType); - if (componentTx != null) return new ObjectArrayTransformer<>(componentTx); - } - - for (var ifaceEntry : REGISTERED_INTERFACES.entrySet()) { - if (ifaceEntry.getKey().isAssignableFrom(type)) return ifaceEntry.getValue(); - } - - if (!ISyncManaged.class.isAssignableFrom(type)) throw new IllegalStateException( - "No value transformer for sync object type: %s".formatted(type.getCanonicalName())); - else return null; - } - }; - - public static IValueTransformer getCollectionTransformer(Field type) { - Class collectionType = type.getType(); - if (!Collection.class.isAssignableFrom(collectionType)) return null; - if (type.getGenericType() instanceof ParameterizedType ptype) { - Type[] actualTypes = ptype.getActualTypeArguments(); - Type keyType = actualTypes[0]; - Type valueType = actualTypes.length > 1 ? actualTypes[1] : null; - if (List.class.isAssignableFrom(collectionType)) { - if (keyType instanceof Class keyClass) { - if (ISyncManaged.class.isAssignableFrom(keyClass)) - throw new IllegalArgumentException("Cannot sync collection of ISyncManaged objects"); - return new ListTransformer<>(ValueTransformers.get(keyClass)); - } - } else if (Set.class.isAssignableFrom(collectionType)) { - if (keyType instanceof Class keyClass) { - if (ISyncManaged.class.isAssignableFrom(keyClass)) - throw new IllegalArgumentException("Cannot sync collection of ISyncManaged objects"); - return new SetTransformer<>(ValueTransformers.get(keyClass)); - } - } else if (Map.class.isAssignableFrom(collectionType)) { - if (keyType instanceof Class keyClass && valueType instanceof Class valueClass) { - if (ISyncManaged.class.isAssignableFrom(keyClass) || - ISyncManaged.class.isAssignableFrom(valueClass)) - throw new IllegalArgumentException("Cannot sync collection of ISyncManaged objects"); - - return new MapTransformer<>(ValueTransformers.get(keyClass), ValueTransformers.get(valueClass)); - } - } - } - return null; - } - - @SuppressWarnings("unchecked") - public static IValueTransformer get(Class type) { - return (IValueTransformer) TRANSFORMERS.get(boxIfPrimitive(type)); - } - - public static void registerClassTransformer(Class type, IValueTransformer transformer) { - REGISTERED.putIfAbsent(type, transformer); - } - - public static void registerInterfaceTransformer(Class type, IValueTransformer transformer) { - REGISTERED_INTERFACES.put(type, transformer); - } - - public static IValueTransformer simpleNBT(Function write, Function read) { - return new IValueTransformer<>() { - - @Override - public Tag serializeNBT(T value, ISyncManaged holder) { - return write.apply(value); - } - - @Override - public T deserializeNBT(Tag tag, ISyncManaged holder, @Nullable T currentVal) { - return read.apply(tag); - } - }; - } - - static { - - registerClassTransformer(Integer.class, - simpleNBT(IntTag::valueOf, t -> (t instanceof IntTag intTag) ? intTag.getAsInt() : 0)); - registerClassTransformer(Long.class, - simpleNBT(LongTag::valueOf, t -> (t instanceof LongTag longTag) ? longTag.getAsLong() : 0L)); - registerClassTransformer(Float.class, - simpleNBT(FloatTag::valueOf, t -> (t instanceof FloatTag floatTag) ? floatTag.getAsFloat() : 0f)); - registerClassTransformer(Double.class, - simpleNBT(DoubleTag::valueOf, t -> (t instanceof DoubleTag doubleTag) ? doubleTag.getAsDouble() : 0.0)); - registerClassTransformer(Short.class, simpleNBT(ShortTag::valueOf, - t -> (t instanceof ShortTag shortTag) ? shortTag.getAsShort() : (short) 0)); - registerClassTransformer(Byte.class, - simpleNBT(ByteTag::valueOf, t -> (t instanceof ByteTag byteTag) ? byteTag.getAsByte() : (byte) 0)); - registerClassTransformer(Character.class, simpleNBT((v) -> IntTag.valueOf((int) v), - t -> (t instanceof IntTag intTag) ? intTag.getAsByte() : 0x0)); - registerClassTransformer(Boolean.class, - simpleNBT(ByteTag::valueOf, (t) -> t instanceof ByteTag byteTag && byteTag.getAsByte() != 0)); - - // Primtive arrays - registerClassTransformer(int[].class, new PrimitiveArrayTransformers.IntArrayTransformer()); - registerClassTransformer(long[].class, new PrimitiveArrayTransformers.LongArrayTransformer()); - registerClassTransformer(byte[].class, new PrimitiveArrayTransformers.ByteArrayTransformer()); - - // Classes - - registerClassTransformer(String.class, simpleNBT(StringTag::valueOf, - (t) -> (t instanceof StringTag stringTag) ? stringTag.getAsString() : "")); - registerClassTransformer(ItemStack.class, simpleNBT(IForgeItemStack::serializeNBT, - (t) -> (t instanceof CompoundTag compoundTag) ? ItemStack.of(compoundTag) : ItemStack.EMPTY)); - registerClassTransformer(FluidStack.class, simpleNBT((FluidStack v) -> v.writeToNBT(new CompoundTag()), - (t) -> (t instanceof CompoundTag compoundTag) ? FluidStack.loadFluidStackFromNBT(compoundTag) : - FluidStack.EMPTY)); - registerClassTransformer(UUID.class, simpleNBT(NbtUtils::createUUID, NbtUtils::loadUUID)); - registerClassTransformer(BlockPos.class, simpleNBT(NbtUtils::writeBlockPos, - (t) -> (t instanceof CompoundTag compoundTag) ? NbtUtils.readBlockPos(compoundTag) : BlockPos.ZERO)); - registerClassTransformer(CompoundTag.class, simpleNBT((CompoundTag v) -> v, - (t) -> (t instanceof CompoundTag compoundTag) ? compoundTag : new CompoundTag())); - - registerClassTransformer(GTRecipe.class, new GTRecipeTransformer()); - registerClassTransformer(GTRecipeType.class, new GTRecipeTypeTransformer()); - registerClassTransformer(MachineRenderState.class, new MachineRenderStateTransformer()); - registerClassTransformer(Material.class, new MaterialTransformer()); - registerClassTransformer(MonitorGroup.class, new MonitorGroupTransformer()); - registerClassTransformer(CustomFluidTank.class, new CustomFluidTankTransformer()); - - // Interfaces & abstract classes - - registerInterfaceTransformer(INBTSerializable.class, new NBTSerialisableTransformer()); - registerInterfaceTransformer(Component.class, - simpleNBT((Component c) -> StringTag.valueOf(Component.Serializer.toJson(c)), - t -> (t instanceof StringTag stringTag) ? - Component.Serializer.fromJson(stringTag.getAsString()) : Component.empty())); - registerInterfaceTransformer(CoverBehavior.class, new CoverBehaviorTransformer()); - - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/collections/ListTransformer.java b/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/collections/ListTransformer.java deleted file mode 100644 index b9514a80ac4..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/collections/ListTransformer.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.gregtechceu.gtceu.syncsystem.data_transformers.collections; - -import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.syncsystem.ISyncManaged; -import com.gregtechceu.gtceu.syncsystem.IValueTransformer; - -import net.minecraft.nbt.ListTag; -import net.minecraft.nbt.Tag; - -import java.util.ArrayList; -import java.util.List; - -public class ListTransformer implements IValueTransformer> { - - private final IValueTransformer elementTransformer; - - public ListTransformer(IValueTransformer elementTransformer) { - this.elementTransformer = elementTransformer; - } - - @Override - public Tag serializeNBT(List value, ISyncManaged holder) { - ListTag list = new ListTag(); - for (var obj : value) { - list.add(elementTransformer.serializeNBT(obj, null)); - } - return list; - } - - @Override - public List deserializeNBT(Tag tag, ISyncManaged holder, List current) { - if (!(tag instanceof ListTag listTag)) { - GTCEu.LOGGER.error("Tag is of type {}, not ListTag", tag.getType()); - return current; - } - if (current != null) current.clear(); - else current = new ArrayList<>(); - List finalCurrent = current; - listTag.forEach(t -> finalCurrent - .add(elementTransformer.deserializeNBT(IValueTransformer.stripLdlibWrapper(t), null, null))); - - return current; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/collections/MapTransformer.java b/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/collections/MapTransformer.java deleted file mode 100644 index 762e20f8b82..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/collections/MapTransformer.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.gregtechceu.gtceu.syncsystem.data_transformers.collections; - -import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.syncsystem.ISyncManaged; -import com.gregtechceu.gtceu.syncsystem.IValueTransformer; - -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.ListTag; -import net.minecraft.nbt.Tag; - -import java.util.HashMap; -import java.util.Map; - -public class MapTransformer implements IValueTransformer> { - - private final IValueTransformer keyTransformer; - private final IValueTransformer valueTransformer; - - public MapTransformer(IValueTransformer keyTransformer, IValueTransformer valueTransformer) { - this.keyTransformer = keyTransformer; - this.valueTransformer = valueTransformer; - } - - @Override - public boolean mustProvideObject() { - return true; - } - - @Override - public Tag serializeNBT(Map value, ISyncManaged holder) { - ListTag entries = new ListTag(); - for (var entry : value.entrySet()) { - CompoundTag compound = new CompoundTag(); - compound.put("k", keyTransformer.serializeNBT(entry.getKey(), null)); - compound.put("v", valueTransformer.serializeNBT(entry.getValue(), null)); - entries.add(compound); - } - return entries; - } - - @Override - public Map deserializeNBT(Tag tag, ISyncManaged holder, Map current) { - if (!(tag instanceof ListTag listTag)) { - GTCEu.LOGGER.error("Tag is of type {}, not ListTag", tag.getType()); - return current; - } - if (current != null) current.clear(); - else current = new HashMap<>(); - for (Tag entryTag : listTag) { - CompoundTag compound = (CompoundTag) entryTag; - K key = keyTransformer.deserializeNBT(compound.get("k"), null, null); - V value = valueTransformer.deserializeNBT(compound.get("v"), null, null); - current.put(key, value); - } - return current; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/collections/ObjectArrayTransformer.java b/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/collections/ObjectArrayTransformer.java deleted file mode 100644 index 6d85bf696ad..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/collections/ObjectArrayTransformer.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.gregtechceu.gtceu.syncsystem.data_transformers.collections; - -import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.syncsystem.ISyncManaged; -import com.gregtechceu.gtceu.syncsystem.IValueTransformer; - -import net.minecraft.nbt.ListTag; -import net.minecraft.nbt.Tag; - -import java.util.Arrays; - -public class ObjectArrayTransformer implements IValueTransformer { - - private final IValueTransformer elementTransformer; - - @Override - public boolean mustProvideObject() { - return true; - } - - public ObjectArrayTransformer(IValueTransformer elementTransformer) { - this.elementTransformer = elementTransformer; - } - - @Override - public Tag serializeNBT(T[] value, ISyncManaged holder) { - ListTag listTag = new ListTag(); - for (T element : value) { - listTag.add(elementTransformer.serializeNBT(element, null)); - } - return listTag; - } - - @Override - public T[] deserializeNBT(Tag tag, ISyncManaged holder, T[] current) { - if (!(tag instanceof ListTag listTag)) { - GTCEu.LOGGER.error("Tag is of type {}, not ListTag", tag.getType()); - return current; - } - - if (listTag.size() != current.length) { - current = Arrays.copyOf(current, listTag.size()); - } - for (int i = 0; i < listTag.size(); i++) { - if (elementTransformer.mustProvideObject()) { - elementTransformer.deserializeNBT(IValueTransformer.stripLdlibWrapper(listTag.get(i)), null, - current[i]); - } else { - current[i] = elementTransformer.deserializeNBT(IValueTransformer.stripLdlibWrapper(listTag.get(i)), - null, null); - } - } - return current; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/collections/PrimitiveArrayTransformers.java b/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/collections/PrimitiveArrayTransformers.java deleted file mode 100644 index 877f494b063..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/collections/PrimitiveArrayTransformers.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.gregtechceu.gtceu.syncsystem.data_transformers.collections; - -import com.gregtechceu.gtceu.syncsystem.ISyncManaged; -import com.gregtechceu.gtceu.syncsystem.IValueTransformer; - -import net.minecraft.nbt.*; - -public class PrimitiveArrayTransformers { - - public static class IntArrayTransformer implements IValueTransformer { - - @Override - public Tag serializeNBT(int[] value, ISyncManaged holder) { - return new IntArrayTag(value); - } - - @Override - public int[] deserializeNBT(Tag tag, ISyncManaged holder, int[] currentVal) { - if (tag instanceof IntArrayTag arr) return arr.getAsIntArray(); - return new int[0]; - } - } - - public static class LongArrayTransformer implements IValueTransformer { - - @Override - public Tag serializeNBT(long[] value, ISyncManaged holder) { - return new LongArrayTag(value); - } - - @Override - public long[] deserializeNBT(Tag tag, ISyncManaged holder, long[] currentVal) { - if (tag instanceof LongArrayTag arr) return arr.getAsLongArray(); - return new long[0]; - } - } - - public static class ByteArrayTransformer implements IValueTransformer { - - @Override - public Tag serializeNBT(byte[] value, ISyncManaged holder) { - return new ByteArrayTag(value); - } - - @Override - public byte[] deserializeNBT(Tag tag, ISyncManaged holder, byte[] currentVal) { - if (tag instanceof ByteArrayTag arr) return arr.getAsByteArray(); - return new byte[0]; - } - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/collections/SetTransformer.java b/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/collections/SetTransformer.java deleted file mode 100644 index edbacfb529d..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/collections/SetTransformer.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.gregtechceu.gtceu.syncsystem.data_transformers.collections; - -import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.syncsystem.ISyncManaged; -import com.gregtechceu.gtceu.syncsystem.IValueTransformer; - -import net.minecraft.nbt.ListTag; -import net.minecraft.nbt.Tag; - -import java.util.HashSet; -import java.util.Set; - -public class SetTransformer implements IValueTransformer> { - - private final IValueTransformer elementTransformer; - - @Override - public boolean mustProvideObject() { - return true; - } - - public SetTransformer(IValueTransformer elementTransformer) { - this.elementTransformer = elementTransformer; - } - - @Override - public Tag serializeNBT(Set value, ISyncManaged holder) { - ListTag tag = new ListTag(); - for (T element : value) { - tag.add(elementTransformer.serializeNBT(element, null)); - } - return tag; - } - - @Override - public Set deserializeNBT(Tag tag, ISyncManaged holder, Set current) { - if (!(tag instanceof ListTag listTag)) { - GTCEu.LOGGER.error("Tag is of type {}, not ListTag", tag.getType()); - return current; - } - if (current != null) current.clear(); - else current = new HashSet<>(); - for (Tag elementTag : listTag) { - current.add(elementTransformer.deserializeNBT(elementTag, null, null)); - } - return current; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/syncsystem/network/SPacketUpdateBESyncValue.java b/src/main/java/com/gregtechceu/gtceu/syncsystem/network/SPacketUpdateBESyncValue.java deleted file mode 100644 index 08a1ac12797..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/syncsystem/network/SPacketUpdateBESyncValue.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.gregtechceu.gtceu.syncsystem.network; - -import com.gregtechceu.gtceu.common.network.GTNetwork; -import com.gregtechceu.gtceu.syncsystem.ManagedSyncBlockEntity; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.core.BlockPos; -import net.minecraft.core.registries.Registries; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.resources.ResourceKey; -import net.minecraft.world.level.Level; -import net.minecraftforge.network.NetworkDirection; -import net.minecraftforge.network.NetworkEvent; - -public class SPacketUpdateBESyncValue implements GTNetwork.INetPacket { - - private ManagedSyncBlockEntity blockEntity = null; - private CompoundTag data = null; - private final BlockPos entityPos; - private ResourceKey dimension = null; - - public SPacketUpdateBESyncValue(FriendlyByteBuf buf) { - dimension = buf.readResourceKey(Registries.DIMENSION); - entityPos = buf.readBlockPos(); - data = buf.readNbt(); - } - - public SPacketUpdateBESyncValue(ManagedSyncBlockEntity entity) { - blockEntity = entity; - entityPos = entity.getBlockPos(); - Level entityLvl = entity.getLevel(); - if (entityLvl == null) return; - dimension = entityLvl.dimension(); - data = blockEntity.getSyncDataHolder().serializeNBT(true); - } - - @Override - public void encode(FriendlyByteBuf buffer) { - var entityLvl = blockEntity.getLevel(); - if (entityLvl == null) return; - buffer.writeResourceKey(entityLvl.dimension()); - buffer.writeBlockPos(entityPos); - buffer.writeNbt(data); - } - - @Override - public void execute(NetworkEvent.Context context) { - if (context.getDirection() == NetworkDirection.PLAY_TO_CLIENT) { - ClientLevel cLvl = Minecraft.getInstance().level; - if (cLvl == null) return; - if (cLvl.dimension() != dimension) return; - if (!cLvl.isLoaded(entityPos)) return; - var entity = cLvl.getExistingBlockEntity(entityPos); - if (entity instanceof ManagedSyncBlockEntity syncBlockEntity) { - syncBlockEntity.getSyncDataHolder().deserializeNBT(data, true); - } - } - } -}