Skip to content

Commit a8b6bd1

Browse files
authored
Fix fluid stack GUI encoding & machine item saving (GregTechCEu#3132)
1 parent 9bc5123 commit a8b6bd1

File tree

70 files changed

+748
-462
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+748
-462
lines changed

src/main/java/com/gregtechceu/gtceu/api/block/MetaMachineBlock.java

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.gregtechceu.gtceu.api.block;
22

33
import com.gregtechceu.gtceu.api.item.IGTTool;
4+
import com.gregtechceu.gtceu.api.item.MetaMachineItem;
45
import com.gregtechceu.gtceu.api.item.tool.GTToolType;
56
import com.gregtechceu.gtceu.api.item.tool.ToolHelper;
67
import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity;
@@ -17,8 +18,6 @@
1718

1819
import net.minecraft.core.BlockPos;
1920
import net.minecraft.core.Direction;
20-
import net.minecraft.core.component.DataComponents;
21-
import net.minecraft.nbt.CompoundTag;
2221
import net.minecraft.network.chat.Component;
2322
import net.minecraft.server.level.ServerPlayer;
2423
import net.minecraft.util.RandomSource;
@@ -30,7 +29,6 @@
3029
import net.minecraft.world.item.Item;
3130
import net.minecraft.world.item.ItemStack;
3231
import net.minecraft.world.item.TooltipFlag;
33-
import net.minecraft.world.item.component.CustomData;
3432
import net.minecraft.world.item.context.BlockPlaceContext;
3533
import net.minecraft.world.item.context.UseOnContext;
3634
import net.minecraft.world.level.BlockAndTintGetter;
@@ -126,12 +124,6 @@ public void setPlacedBy(Level pLevel, BlockPos pPos, BlockState pState, @Nullabl
126124
machine.markDirty();
127125
}
128126
}
129-
if (machine instanceof IDropSaveMachine dropSaveMachine) {
130-
CustomData tag = pStack.get(DataComponents.BLOCK_ENTITY_DATA);
131-
if (tag != null) {
132-
dropSaveMachine.loadFromItem(tag.copyTag());
133-
}
134-
}
135127
if (machine instanceof IMachineLife machineLife) {
136128
machineLife.onMachinePlaced(player, pStack);
137129
}
@@ -189,11 +181,9 @@ public Direction getFrontFacing(BlockState state) {
189181
public ItemStack getCloneItemStack(BlockState state, HitResult target, LevelReader level, BlockPos pos,
190182
Player player) {
191183
ItemStack itemStack = super.getCloneItemStack(state, target, level, pos, player);
192-
if (getMachine(level, pos) instanceof IDropSaveMachine dropSaveMachine && dropSaveMachine.savePickClone()) {
193-
CompoundTag tag = itemStack.getOrDefault(DataComponents.BLOCK_ENTITY_DATA, CustomData.EMPTY).copyTag();
194-
// TODO remove in future version.
195-
dropSaveMachine.saveToItem(tag);
196-
itemStack.set(DataComponents.BLOCK_ENTITY_DATA, CustomData.of(tag));
184+
MetaMachine machine = getMachine(level, pos);
185+
if (machine instanceof IDropSaveMachine dropSaveMachine && dropSaveMachine.savePickClone()) {
186+
dropSaveMachine.saveToItem(itemStack, level.registryAccess());
197187
}
198188
return itemStack;
199189
}
@@ -229,13 +219,22 @@ public BlockState rotate(BlockState pState, Rotation pRotation) {
229219

230220
@Override
231221
public List<ItemStack> getDrops(BlockState state, LootParams.Builder builder) {
232-
BlockEntity tileEntity = builder.getOptionalParameter(LootContextParams.BLOCK_ENTITY);
222+
BlockEntity blockEntity = builder.getOptionalParameter(LootContextParams.BLOCK_ENTITY);
233223
var drops = super.getDrops(state, builder);
234-
if (tileEntity instanceof IMachineBlockEntity holder) {
224+
if (blockEntity instanceof IMachineBlockEntity holder) {
235225
var machine = holder.getMetaMachine();
236226
if (machine instanceof IMachineModifyDrops machineModifyDrops) {
237227
machineModifyDrops.onDrops(drops);
238228
}
229+
if (machine instanceof IDropSaveMachine dropSaveMachine && dropSaveMachine.saveBreak()) {
230+
for (ItemStack drop : drops) {
231+
if (drop.getItem() instanceof MetaMachineItem item && item.getBlock() == this) {
232+
dropSaveMachine.saveToItem(drop, blockEntity.getLevel().registryAccess());
233+
// break here to not dupe contents if a machine drops multiple of itself for whatever reason.
234+
break;
235+
}
236+
}
237+
}
239238
}
240239
return drops;
241240
}
@@ -351,7 +350,7 @@ public void neighborChanged(BlockState state, Level level, BlockPos pos, Block b
351350
@Nullable
352351
@Override
353352
public BlockState getBlockAppearance(BlockState state, BlockAndTintGetter level, BlockPos pos, Direction side,
354-
@Nullable BlockState sourceState, BlockPos sourcePos) {
353+
@Nullable BlockState sourceState, @Nullable BlockPos sourcePos) {
355354
var machine = getMachine(level, pos);
356355
if (machine != null) {
357356
return machine.getBlockAppearance(state, level, pos, side, sourceState, sourcePos);

src/main/java/com/gregtechceu/gtceu/api/blockentity/MetaMachineBlockEntity.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import net.minecraft.core.Direction;
1313
import net.minecraft.core.component.DataComponentMap;
1414
import net.minecraft.core.component.DataComponentType;
15+
import net.minecraft.nbt.CompoundTag;
1516
import net.minecraft.world.entity.player.Player;
1617
import net.minecraft.world.item.ItemStack;
1718
import net.minecraft.world.level.block.entity.BlockEntity;
@@ -81,6 +82,13 @@ protected void collectImplicitComponents(DataComponentMap.Builder components) {
8182
metaMachine.collectImplicitComponents(components);
8283
}
8384

85+
@SuppressWarnings("deprecation")
86+
@Override
87+
public void removeComponentsFromTag(CompoundTag tag) {
88+
super.removeComponentsFromTag(tag);
89+
metaMachine.removeItemComponentsFromTag(tag);
90+
}
91+
8492
@Override
8593
public long getOffset() {
8694
return offset;

src/main/java/com/gregtechceu/gtceu/api/capability/GTCapabilityHelper.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -64,14 +64,7 @@ public static RecipeLogic getRecipeLogic(Level level, BlockPos pos, @Nullable Di
6464

6565
@Nullable
6666
public static IEnergyStorage getForgeEnergy(Level level, BlockPos pos, @Nullable Direction side) {
67-
if (level.getBlockState(pos).hasBlockEntity()) {
68-
var blockEntity = level.getBlockEntity(pos);
69-
if (blockEntity != null) {
70-
return blockEntity.getLevel().getCapability(Capabilities.EnergyStorage.BLOCK, blockEntity.getBlockPos(),
71-
blockEntity.getBlockState(), blockEntity, side);
72-
}
73-
}
74-
return null;
67+
return level.getCapability(Capabilities.EnergyStorage.BLOCK, pos, side);
7568
}
7669

7770
@Nullable

src/main/java/com/gregtechceu/gtceu/api/capability/ICoverable.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public interface ICoverable extends ITickSubscription, IAppearance {
6767

6868
/**
6969
* Internal method, do not call yourself.
70-
* <br/>
70+
* <br>
7171
* Use {@link ICoverable#removeCover(boolean, Direction, Player)} and
7272
* {@link ICoverable#placeCoverOnSide(Direction, ItemStack, CoverDefinition, ServerPlayer)} instead
7373
*
@@ -256,7 +256,7 @@ static boolean canPlaceCover(CoverDefinition coverDef, ICoverable coverable) {
256256
@Override
257257
default BlockState getBlockAppearance(@NotNull BlockState state, @NotNull BlockAndTintGetter level,
258258
@NotNull BlockPos pos, @NotNull Direction side,
259-
@Nullable BlockState sourceState, @NotNull BlockPos sourcePos) {
259+
@Nullable BlockState sourceState, @Nullable BlockPos sourcePos) {
260260
CoverBehavior cover = getCoverAtSide(side);
261261
if (cover != null) {
262262
return cover.getAppearance(sourceState, sourcePos);

src/main/java/com/gregtechceu/gtceu/api/capability/recipe/IRecipeHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public interface IRecipeHandler<K> extends IFilteredHandler<K> {
3030
* @param recipe recipe.
3131
* @param left left contents for to be handled.
3232
* @param simulate simulate.
33-
* @return left contents for continue handling by other proxies. <br/>
33+
* @return left contents for continue handling by other proxies. <br>
3434
* null - nothing left. handling successful/finish. you should always return null as a handling-done mark.
3535
*/
3636
List<K> handleRecipeInner(IO io, GTRecipe recipe, List<K> left, boolean simulate);

src/main/java/com/gregtechceu/gtceu/api/capability/recipe/RecipeCapability.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
import com.lowdragmc.lowdraglib.gui.widget.Widget;
1414
import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup;
1515

16+
import net.minecraft.core.HolderLookup;
17+
import net.minecraft.nbt.Tag;
1618
import net.minecraft.network.RegistryFriendlyByteBuf;
1719
import net.minecraft.network.chat.Component;
1820
import net.neoforged.neoforge.network.connection.ConnectionType;
@@ -93,6 +95,14 @@ public T of(Object o) {
9395
return serializer.of(o);
9496
}
9597

98+
public T fromNbt(Tag tag, HolderLookup.Provider provider) {
99+
return serializer.fromNbt(tag, provider);
100+
}
101+
102+
public Tag toNbt(Object content, HolderLookup.Provider provider) {
103+
return serializer.toNbt(of(content), provider);
104+
}
105+
96106
public String slotName(IO io) {
97107
return "%s_%s".formatted(name, io.name().toLowerCase(Locale.ROOT));
98108
}

src/main/java/com/gregtechceu/gtceu/api/cover/CoverBehavior.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ public boolean shouldRenderGrid(Player player, BlockPos pos, BlockState state, I
212212
* get Appearance. same as IBlockExtension.getAppearance() / IFabricBlock.getAppearance()
213213
*/
214214
@Nullable
215-
public BlockState getAppearance(BlockState sourceState, BlockPos sourcePos) {
215+
public BlockState getAppearance(@Nullable BlockState sourceState, @Nullable BlockPos sourcePos) {
216216
return null;
217217
}
218218

src/main/java/com/gregtechceu/gtceu/api/cover/filter/FluidFilter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ static FluidFilter loadFilter(ItemStack itemStack) {
2424
/**
2525
* Retrieves the configured fluid amount for the supplied fluid.
2626
*
27-
* @return The amount configured for the supplied fluid stack.<br/>
27+
* @return The amount configured for the supplied fluid stack.<br>
2828
* If the stack is not matched by this filter, 0 is returned instead.
2929
*/
3030
int testFluidAmount(FluidStack fluidStack);
@@ -37,7 +37,7 @@ default boolean supportsAmounts() {
3737
}
3838

3939
/**
40-
* An empty fluid filter that allows all fluids.<br/>
40+
* An empty fluid filter that allows all fluids.<br>
4141
* ONLY TO BE USED FOR FLUID MATCHING! All other functionality will throw an exception.
4242
*/
4343
FluidFilter EMPTY = new FluidFilter() {

src/main/java/com/gregtechceu/gtceu/api/cover/filter/ItemFilter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ static ItemFilter loadFilter(ItemStack itemStack) {
2323
/**
2424
* Retrieves the configured item count for the supplied item.
2525
*
26-
* @return The amount configured for the supplied item stack.<br/>
26+
* @return The amount configured for the supplied item stack.<br>
2727
* If the stack is not matched by this filter, 0 is returned instead.
2828
*/
2929
int testItemCount(ItemStack itemStack);
@@ -36,7 +36,7 @@ default boolean supportsAmounts() {
3636
}
3737

3838
/**
39-
* An empty item filter that allows all items.<br/>
39+
* An empty item filter that allows all items.<br>
4040
* ONLY TO BE USED FOR ITEM MATCHING! All other functionality will throw an exception.
4141
*/
4242
ItemFilter EMPTY = new ItemFilter() {

src/main/java/com/gregtechceu/gtceu/api/gui/fancy/TitleBarWidget.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public class TitleBarWidget extends WidgetGroup {
3333
/**
3434
* The button group is rendered behind the main section and contains the back and menu buttons.
3535
* <p>
36-
* For easier texture reuse, the background is applied to the group itself, instead of the individual buttons.<br/>
36+
* For easier texture reuse, the background is applied to the group itself, instead of the individual buttons.<br>
3737
* The button group therefore needs to be rendered behind the main section.
3838
*/
3939
private final WidgetGroup buttonGroup;

0 commit comments

Comments
 (0)