Skip to content

Commit 6418f71

Browse files
committed
Explode wrapped item/fluid stacks
1 parent e7a962c commit 6418f71

16 files changed

+200
-263
lines changed

src/main/java/gregtech/api/mui/GTByteBufAdapters.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@
77
import net.minecraft.network.PacketBuffer;
88
import net.minecraftforge.fluids.Fluid;
99

10+
import appeng.api.storage.data.IAEFluidStack;
11+
import appeng.api.storage.data.IAEItemStack;
12+
import appeng.fluids.util.AEFluidStack;
13+
import appeng.util.item.AEItemStack;
1014
import com.cleanroommc.modularui.utils.serialization.*;
1115
import org.jetbrains.annotations.NotNull;
1216

@@ -23,6 +27,12 @@ public class GTByteBufAdapters {
2327

2428
public static final IByteBufAdapter<Fluid> FLUID = makeAdapter(NetworkUtil::readFluid, NetworkUtil::writeFluid);
2529

30+
public static final IByteBufAdapter<IAEItemStack> AE_ITEM_STACK = makeAdapter(AEItemStack::fromPacket,
31+
(buf, stack) -> stack.writeToPacket(buf));
32+
33+
public static final IByteBufAdapter<IAEFluidStack> AE_FLUID_STACK = makeAdapter(AEFluidStack::fromPacket,
34+
(buf, stack) -> stack.writeToPacket(buf));
35+
2636
public static <T> IByteBufAdapter<T> makeAdapter(@NotNull IByteBufDeserializer<T> deserializer,
2737
@NotNull IByteBufSerializer<T> serializer) {
2838
return makeAdapter(deserializer, serializer, IEquals.defaultTester());

src/main/java/gregtech/api/mui/sync/appeng/AEFluidSyncHandler.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@
88
import gregtech.common.metatileentities.multi.multiblockpart.appeng.slot.ExportOnlyAEFluidList;
99
import gregtech.common.metatileentities.multi.multiblockpart.appeng.slot.ExportOnlyAEFluidSlot;
1010
import gregtech.common.metatileentities.multi.multiblockpart.appeng.slot.IConfigurableSlot;
11-
import gregtech.common.metatileentities.multi.multiblockpart.appeng.stack.WrappedFluidStack;
1211

1312
import net.minecraft.item.ItemStack;
1413
import net.minecraftforge.fluids.FluidStack;
1514
import net.minecraftforge.fml.relauncher.Side;
1615
import net.minecraftforge.fml.relauncher.SideOnly;
1716

1817
import appeng.api.storage.data.IAEFluidStack;
18+
import appeng.fluids.util.AEFluidStack;
1919
import com.cleanroommc.modularui.utils.serialization.IByteBufAdapter;
2020
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
2121
import mezz.jei.api.gui.IRecipeLayout;
@@ -49,14 +49,14 @@ public AEFluidSyncHandler(ExportOnlyAEFluidList fluidList, @Nullable Runnable di
4949

5050
@Override
5151
protected @NotNull IByteBufAdapter<IAEFluidStack> initializeByteBufAdapter() {
52-
return GTByteBufAdapters.WRAPPED_FLUID_STACK;
52+
return GTByteBufAdapters.AE_FLUID_STACK;
5353
}
5454

5555
@Override
5656
public boolean isStackValidForSlot(int index, @Nullable IAEFluidStack stack) {
5757
if (stack == null) return true;
5858
if (!isStocking) return true;
59-
return !fluidList.hasStackInConfig(((WrappedFluidStack) stack).getDefinition(), true);
59+
return !fluidList.hasStackInConfig(stack.getFluidStack(), true);
6060
}
6161

6262
@Override
@@ -92,6 +92,6 @@ public IRecipeTransferError receiveRecipe(@NotNull IRecipeLayout recipeLayout, b
9292

9393
@SideOnly(Side.CLIENT)
9494
public void setConfig(int index, @Nullable FluidStack stack) {
95-
setConfig(index, WrappedFluidStack.fromFluidStack(stack));
95+
setConfig(index, stack == null ? null : AEFluidStack.fromFluidStack(stack));
9696
}
9797
}

src/main/java/gregtech/api/mui/sync/appeng/AEItemSyncHandler.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@
88
import gregtech.common.metatileentities.multi.multiblockpart.appeng.slot.ExportOnlyAEItemList;
99
import gregtech.common.metatileentities.multi.multiblockpart.appeng.slot.ExportOnlyAEItemSlot;
1010
import gregtech.common.metatileentities.multi.multiblockpart.appeng.slot.IConfigurableSlot;
11-
import gregtech.common.metatileentities.multi.multiblockpart.appeng.stack.WrappedItemStack;
1211

1312
import net.minecraft.item.ItemStack;
1413
import net.minecraftforge.fml.relauncher.Side;
1514
import net.minecraftforge.fml.relauncher.SideOnly;
1615

1716
import appeng.api.storage.data.IAEItemStack;
17+
import appeng.util.item.AEItemStack;
1818
import com.cleanroommc.modularui.utils.serialization.IByteBufAdapter;
1919
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
2020
import mezz.jei.api.gui.IRecipeLayout;
@@ -49,7 +49,7 @@ public AEItemSyncHandler(ExportOnlyAEItemList itemList, @Nullable Runnable dirty
4949

5050
@Override
5151
protected @NotNull IByteBufAdapter<IAEItemStack> initializeByteBufAdapter() {
52-
return GTByteBufAdapters.WRAPPED_ITEM_STACK;
52+
return GTByteBufAdapters.AE_ITEM_STACK;
5353
}
5454

5555
@Override
@@ -94,6 +94,6 @@ public IRecipeTransferError receiveRecipe(@NotNull IRecipeLayout recipeLayout, b
9494

9595
@SideOnly(Side.CLIENT)
9696
public void setConfig(int index, @Nullable ItemStack stack) {
97-
setConfig(index, WrappedItemStack.fromItemStack(stack));
97+
setConfig(index, stack == null ? null : AEItemStack.fromItemStack(stack));
9898
}
9999
}

src/main/java/gregtech/api/mui/widget/appeng/fluid/AEFluidConfigSlot.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import gregtech.api.util.KeyUtil;
99
import gregtech.api.util.TextFormattingUtil;
1010
import gregtech.client.utils.RenderUtil;
11-
import gregtech.common.metatileentities.multi.multiblockpart.appeng.stack.WrappedFluidStack;
1211

1312
import net.minecraft.item.ItemStack;
1413
import net.minecraftforge.fluids.FluidStack;
@@ -45,9 +44,9 @@ public void onInit() {
4544

4645
@Override
4746
protected void buildTooltip(@NotNull RichTooltip tooltip) {
48-
WrappedFluidStack config = (WrappedFluidStack) getSyncHandler().getConfig(index);
47+
IAEFluidStack config = getSyncHandler().getConfig(index);
4948
if (config != null) {
50-
FluidStack stack = config.getDefinition();
49+
FluidStack stack = config.getFluidStack();
5150
tooltip.addLine(KeyUtil.fluid(stack));
5251
FluidTooltipUtil.fluidInfo(stack, tooltip, false, true, true);
5352
tooltip.addLine(FluidTooltipUtil.getFluidModNameKey(stack));
@@ -74,9 +73,9 @@ public boolean isValidSyncHandler(SyncHandler syncHandler) {
7473

7574
@Override
7675
public void draw(ModularGuiContext context, WidgetThemeEntry<?> widgetTheme) {
77-
WrappedFluidStack config = (WrappedFluidStack) getSyncHandler().getConfig(index);
76+
IAEFluidStack config = getSyncHandler().getConfig(index);
7877
if (config != null) {
79-
GuiDraw.drawFluidTexture(config.getDefinition(), 1, 1, getArea().w() - 2, getArea().h() - 2, 0);
78+
GuiDraw.drawFluidTexture(config.getFluidStack(), 1, 1, getArea().w() - 2, getArea().h() - 2, 0);
8079
if (!isStocking) {
8180
RenderUtil.renderTextFixedCorner(TextFormattingUtil.formatLongToCompactString(config.getStackSize(), 4),
8281
17d, 18d, 0xFFFFFF, true, 0.5f);

src/main/java/gregtech/api/mui/widget/appeng/fluid/AEFluidDisplaySlot.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import gregtech.api.util.KeyUtil;
77
import gregtech.api.util.TextFormattingUtil;
88
import gregtech.client.utils.RenderUtil;
9-
import gregtech.common.metatileentities.multi.multiblockpart.appeng.stack.WrappedFluidStack;
109

1110
import net.minecraftforge.fluids.FluidStack;
1211

@@ -28,9 +27,9 @@ public AEFluidDisplaySlot(int index) {
2827

2928
@Override
3029
protected void buildTooltip(@NotNull RichTooltip tooltip) {
31-
WrappedFluidStack stock = (WrappedFluidStack) getSyncHandler().getStock(index);
30+
IAEFluidStack stock = getSyncHandler().getStock(index);
3231
if (stock != null) {
33-
FluidStack stack = stock.getDefinition();
32+
FluidStack stack = stock.getFluidStack();
3433
tooltip.addLine(KeyUtil.fluid(stack));
3534
FluidTooltipUtil.fluidInfo(stack, tooltip, false, true, true);
3635
tooltip.addLine(FluidTooltipUtil.getFluidModNameKey(stack));
@@ -49,9 +48,9 @@ public boolean isValidSyncHandler(SyncHandler syncHandler) {
4948

5049
@Override
5150
public void draw(ModularGuiContext context, WidgetThemeEntry<?> widgetTheme) {
52-
WrappedFluidStack stock = (WrappedFluidStack) getSyncHandler().getStock(index);
51+
IAEFluidStack stock = getSyncHandler().getStock(index);
5352
if (stock != null) {
54-
GuiDraw.drawFluidTexture(stock.getDefinition(), 1, 1, getArea().w() - 2, getArea().h() - 2, 0);
53+
GuiDraw.drawFluidTexture(stock.getFluidStack(), 1, 1, getArea().w() - 2, getArea().h() - 2, 0);
5554
RenderUtil.renderTextFixedCorner(TextFormattingUtil.formatLongToCompactString(stock.getStackSize(), 4), 17d,
5655
18d, 0xFFFFFF, true, 0.5f);
5756
}

src/main/java/gregtech/api/mui/widget/appeng/fluid/AEFluidStackPreviewWidget.java

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import gregtech.api.mui.widget.appeng.AEStackPreviewWidget;
44
import gregtech.api.util.FluidTooltipUtil;
55
import gregtech.api.util.KeyUtil;
6-
import gregtech.common.metatileentities.multi.multiblockpart.appeng.stack.WrappedFluidStack;
76

87
import net.minecraftforge.fluids.FluidStack;
98

@@ -23,19 +22,19 @@ public AEFluidStackPreviewWidget(@NotNull Supplier<IAEFluidStack> stackToDraw) {
2322

2423
@Override
2524
protected void buildTooltip(@NotNull RichTooltip tooltip) {
26-
if (stackToDraw.get() instanceof WrappedFluidStack wrappedFluidStack) {
27-
FluidStack stack = wrappedFluidStack.getDefinition();
28-
tooltip.addLine(KeyUtil.fluid(stack));
29-
FluidTooltipUtil.fluidInfo(stack, tooltip, false, true, false);
30-
tooltip.addLine(FluidTooltipUtil.getFluidModNameKey(stack));
31-
}
25+
IAEFluidStack stack = stackToDraw.get();
26+
if (stack == null) return;
27+
28+
FluidStack fluidStack = stack.getFluidStack();
29+
tooltip.addLine(KeyUtil.fluid(fluidStack));
30+
FluidTooltipUtil.fluidInfo(fluidStack, tooltip, false, true, false);
31+
tooltip.addLine(FluidTooltipUtil.getFluidModNameKey(fluidStack));
3232
}
3333

3434
@Override
3535
public void draw(@Nullable IAEFluidStack stackToDraw, int x, int y, int width, int height) {
36-
if (stackToDraw instanceof WrappedFluidStack wrappedFluidStack) {
37-
GuiDraw.drawFluidTexture(wrappedFluidStack.getDefinition(), x, y, width, height, 0.0f);
38-
}
36+
if (stackToDraw == null) return;
37+
GuiDraw.drawFluidTexture(stackToDraw.getFluidStack(), x, y, width, height, 0.0f);
3938
}
4039

4140
@Override

src/main/java/gregtech/api/mui/widget/appeng/item/AEItemConfigSlot.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import gregtech.api.mui.widget.appeng.AEStackPreviewWidget;
77
import gregtech.api.util.TextFormattingUtil;
88
import gregtech.client.utils.RenderUtil;
9-
import gregtech.common.metatileentities.multi.multiblockpart.appeng.stack.WrappedItemStack;
109

1110
import net.minecraft.item.ItemStack;
1211

@@ -39,7 +38,7 @@ public void onInit() {
3938

4039
@Override
4140
protected void buildTooltip(@NotNull RichTooltip tooltip) {
42-
WrappedItemStack config = (WrappedItemStack) getSyncHandler().getConfig(index);
41+
IAEItemStack config = getSyncHandler().getConfig(index);
4342
if (config != null) {
4443
tooltip.addFromItem(config.getDefinition());
4544
tooltip.addLine((context, x, y, width, height, widgetTheme) -> {
@@ -64,7 +63,7 @@ public boolean isValidSyncHandler(SyncHandler syncHandler) {
6463

6564
@Override
6665
public void draw(ModularGuiContext context, WidgetThemeEntry<?> widgetTheme) {
67-
WrappedItemStack config = (WrappedItemStack) getSyncHandler().getConfig(index);
66+
IAEItemStack config = getSyncHandler().getConfig(index);
6867
if (config != null) {
6968
RenderUtil.drawItemStack(config.getDefinition(), 1, 1, false);
7069
if (!isStocking) {

src/main/java/gregtech/api/mui/widget/appeng/item/AEItemDisplaySlot.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import gregtech.api.mui.widget.appeng.AEDisplaySlot;
55
import gregtech.api.util.TextFormattingUtil;
66
import gregtech.client.utils.RenderUtil;
7-
import gregtech.common.metatileentities.multi.multiblockpart.appeng.stack.WrappedItemStack;
87

98
import net.minecraft.item.ItemStack;
109

@@ -25,7 +24,7 @@ public AEItemDisplaySlot(int index) {
2524

2625
@Override
2726
protected void buildTooltip(@NotNull RichTooltip tooltip) {
28-
WrappedItemStack stock = (WrappedItemStack) getSyncHandler().getStock(index);
27+
IAEItemStack stock = getSyncHandler().getStock(index);
2928
if (stock != null) {
3029
tooltip.addFromItem(stock.getDefinition());
3130
}
@@ -43,9 +42,9 @@ public boolean isValidSyncHandler(SyncHandler syncHandler) {
4342

4443
@Override
4544
public void draw(ModularGuiContext context, WidgetThemeEntry<?> widgetTheme) {
46-
WrappedItemStack stock = (WrappedItemStack) getSyncHandler().getStock(index);
45+
IAEItemStack stock = getSyncHandler().getStock(index);
4746
if (stock != null) {
48-
ItemStack stack = stock.createItemStack();
47+
ItemStack stack = stock.getDefinition();
4948
RenderUtil.drawItemStack(stack, 1, 1, false);
5049
RenderUtil.renderTextFixedCorner(TextFormattingUtil.formatLongToCompactString(stock.getStackSize(), 4), 17d,
5150
18d, 0xFFFFFF, true, 0.5f);

src/main/java/gregtech/api/mui/widget/appeng/item/AEItemStackPreviewWidget.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import gregtech.api.mui.widget.appeng.AEStackPreviewWidget;
44
import gregtech.client.utils.RenderUtil;
5-
import gregtech.common.metatileentities.multi.multiblockpart.appeng.stack.WrappedItemStack;
65

76
import appeng.api.storage.data.IAEItemStack;
87
import com.cleanroommc.modularui.screen.RichTooltip;
@@ -19,16 +18,15 @@ public AEItemStackPreviewWidget(@NotNull Supplier<IAEItemStack> stackToDraw) {
1918

2019
@Override
2120
protected void buildTooltip(@NotNull RichTooltip tooltip) {
22-
if (stackToDraw.get() instanceof WrappedItemStack wrappedItemStack) {
23-
tooltip.addFromItem(wrappedItemStack.getDefinition());
24-
}
21+
IAEItemStack stack = stackToDraw.get();
22+
if (stack == null) return;
23+
tooltip.addFromItem(stack.getDefinition());
2524
}
2625

2726
@Override
2827
public void draw(@Nullable IAEItemStack stackToDraw, int x, int y, int width, int height) {
29-
if (stackToDraw instanceof WrappedItemStack wrappedItemStack) {
30-
RenderUtil.drawItemStack(wrappedItemStack.getDefinition(), x, y, false);
31-
}
28+
if (stackToDraw == null) return;
29+
RenderUtil.drawItemStack(stackToDraw.getDefinition(), x, y, false);
3230
}
3331

3432
@Override

src/main/java/gregtech/common/metatileentities/multi/multiblockpart/appeng/MetaTileEntityMEInputBase.java

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import gregtech.api.capability.GregtechDataCodes;
44
import gregtech.api.capability.GregtechTileCapabilities;
55
import gregtech.api.capability.IControllable;
6+
import gregtech.api.capability.IDataStickIntractable;
67
import gregtech.api.capability.IGhostSlotConfigurable;
78
import gregtech.api.capability.impl.GhostCircuitItemStackHandler;
89
import gregtech.api.mui.GTGuiTextures;
@@ -14,10 +15,13 @@
1415
import gregtech.common.metatileentities.multi.multiblockpart.appeng.slot.ExportOnlyAESlot;
1516
import gregtech.common.metatileentities.multi.multiblockpart.appeng.slot.IExportOnlyAEStackList;
1617

18+
import net.minecraft.entity.player.EntityPlayer;
19+
import net.minecraft.item.ItemStack;
1720
import net.minecraft.nbt.NBTTagCompound;
1821
import net.minecraft.network.PacketBuffer;
1922
import net.minecraft.util.EnumFacing;
2023
import net.minecraft.util.ResourceLocation;
24+
import net.minecraft.util.text.TextComponentTranslation;
2125
import net.minecraft.world.World;
2226
import net.minecraftforge.common.capabilities.Capability;
2327
import net.minecraftforge.common.util.Constants;
@@ -42,11 +46,12 @@
4246
import com.cleanroommc.modularui.widgets.layout.Flow;
4347
import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget;
4448
import org.jetbrains.annotations.NotNull;
49+
import org.jetbrains.annotations.Nullable;
4550
import org.jetbrains.annotations.Range;
4651

4752
public abstract class MetaTileEntityMEInputBase<AEStackType extends IAEStack<AEStackType>>
4853
extends MetaTileEntityAEHostableChannelPart<AEStackType>
49-
implements IControllable, IGhostSlotConfigurable {
54+
implements IControllable, IGhostSlotConfigurable, IDataStickIntractable {
5055

5156
public final static int CONFIG_SIZE = 16;
5257
public static final String WORKING_TAG = "WorkingEnabled";
@@ -369,4 +374,74 @@ public void readFromNBT(NBTTagCompound data) {
369374
}
370375
this.circuitInventory.read(data);
371376
}
377+
378+
@Override
379+
public final void onDataStickLeftClick(EntityPlayer player, ItemStack dataStick) {
380+
NBTTagCompound tag = new NBTTagCompound();
381+
tag.setTag("MEInputBus", writeConfigToTag());
382+
dataStick.setTagCompound(tag);
383+
dataStick.setTranslatableName("gregtech.machine.me.item_import.data_stick.name");
384+
player.sendStatusMessage(new TextComponentTranslation("gregtech.machine.me.import_copy_settings"), true);
385+
}
386+
387+
protected NBTTagCompound writeConfigToTag() {
388+
NBTTagCompound tag = new NBTTagCompound();
389+
NBTTagCompound configStacks = new NBTTagCompound();
390+
391+
ExportOnlyAESlot<AEStackType>[] inventory = getAEHandler().getInventory();
392+
tag.setTag("ConfigStacks", configStacks);
393+
for (int index = 0; index < CONFIG_SIZE; index++) {
394+
ExportOnlyAESlot<AEStackType> slot = inventory[index];
395+
AEStackType config = slot.getConfig();
396+
if (config == null) continue;
397+
398+
NBTTagCompound stackNBT = new NBTTagCompound();
399+
config.writeToNBT(stackNBT);
400+
configStacks.setTag(Integer.toString(index), stackNBT);
401+
}
402+
403+
tag.setByte("GhostCircuit", (byte) this.circuitInventory.getCircuitValue());
404+
tag.setInteger(REFRESH_RATE_TAG, this.refreshRate);
405+
return tag;
406+
}
407+
408+
@Override
409+
public final boolean onDataStickRightClick(EntityPlayer player, ItemStack dataStick) {
410+
NBTTagCompound tag = dataStick.getTagCompound();
411+
if (tag == null || !tag.hasKey("MEInputBus")) {
412+
return false;
413+
}
414+
readConfigFromTag(tag.getCompoundTag("MEInputBus"));
415+
syncME();
416+
player.sendStatusMessage(new TextComponentTranslation("gregtech.machine.me.import_paste_settings"), true);
417+
return true;
418+
}
419+
420+
protected void readConfigFromTag(NBTTagCompound tag) {
421+
if (tag.hasKey("ConfigStacks")) {
422+
ExportOnlyAESlot<AEStackType>[] inventory = getAEHandler().getInventory();
423+
NBTTagCompound configStacks = tag.getCompoundTag("ConfigStacks");
424+
for (int index = 0; index < CONFIG_SIZE; index++) {
425+
AEStackType stack = null;
426+
String key = Integer.toString(index);
427+
if (configStacks.hasKey(key)) {
428+
NBTTagCompound configTag = configStacks.getCompoundTag(key);
429+
stack = readStackFromNBT(configTag);
430+
}
431+
432+
inventory[index].setConfig(stack);
433+
}
434+
}
435+
436+
if (tag.hasKey("GhostCircuit")) {
437+
this.setGhostCircuitConfig(tag.getByte("GhostCircuit"));
438+
}
439+
440+
if (tag.hasKey(REFRESH_RATE_TAG)) {
441+
this.refreshRate = tag.getInteger(REFRESH_RATE_TAG);
442+
}
443+
}
444+
445+
@Nullable
446+
protected abstract AEStackType readStackFromNBT(@NotNull NBTTagCompound tagCompound);
372447
}

0 commit comments

Comments
 (0)