Skip to content

Commit 4a7e7f4

Browse files
committed
fix memery card doesn't load pattern in dual interface
1 parent 7db1376 commit 4a7e7f4

17 files changed

+153
-39
lines changed

src/main/java/com/glodblock/github/client/container/ContainerExtendedFluidPatternTerminal.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.glodblock.github.util.Ae2Reflect;
2121
import com.glodblock.github.util.FluidPatternDetails;
2222
import com.glodblock.github.util.Util;
23+
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
2324
import net.minecraft.entity.player.EntityPlayerMP;
2425
import net.minecraft.entity.player.InventoryPlayer;
2526
import net.minecraft.inventory.Slot;
@@ -29,7 +30,6 @@
2930
import net.minecraftforge.items.ItemHandlerHelper;
3031

3132
import java.util.ArrayList;
32-
import java.util.HashMap;
3333
import java.util.List;
3434
import java.util.Objects;
3535

@@ -427,7 +427,7 @@ else if (!slot.getStack().isEmpty()) {
427427
}
428428

429429
@Override
430-
public void acceptPattern(HashMap<Integer, ItemStack[]> inputs, ItemStack[] outputs, boolean combine) {
430+
public void acceptPattern(Int2ObjectMap<ItemStack[]> inputs, ItemStack[] outputs, boolean combine) {
431431
if (part instanceof PartExtendedFluidPatternTerminal) {
432432
((PartExtendedFluidPatternTerminal) part).onChangeCrafting(inputs, outputs, combine);
433433
}

src/main/java/com/glodblock/github/client/container/ContainerFluidPatternEncoder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import com.glodblock.github.interfaces.SlotFluid;
1818
import com.glodblock.github.loader.FCItems;
1919
import com.glodblock.github.util.FluidPatternDetails;
20+
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
2021
import net.minecraft.entity.player.EntityPlayerMP;
2122
import net.minecraft.entity.player.InventoryPlayer;
2223
import net.minecraft.inventory.Slot;
@@ -27,7 +28,6 @@
2728

2829
import javax.annotation.Nullable;
2930
import java.util.ArrayList;
30-
import java.util.HashMap;
3131
import java.util.List;
3232
import java.util.Objects;
3333

@@ -156,7 +156,7 @@ public void doAction(EntityPlayerMP player, InventoryAction action, int slotId,
156156
}
157157

158158
@Override
159-
public void acceptPattern(HashMap<Integer, ItemStack[]> inputs, ItemStack[] outputs, boolean combine) {
159+
public void acceptPattern(Int2ObjectMap<ItemStack[]> inputs, ItemStack[] outputs, boolean combine) {
160160
AeStackInventory<IAEItemStack> craftingSlot = tile.getCraftingSlots();
161161
AeStackInventory<IAEItemStack> outputSlot = tile.getOutputSlots();
162162
for (int index : inputs.keySet()) {

src/main/java/com/glodblock/github/client/container/ContainerFluidPatternTerminal.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import com.glodblock.github.util.FluidCraftingPatternDetails;
2323
import com.glodblock.github.util.FluidPatternDetails;
2424
import com.glodblock.github.util.Util;
25+
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
2526
import net.minecraft.entity.player.EntityPlayerMP;
2627
import net.minecraft.entity.player.InventoryPlayer;
2728
import net.minecraft.inventory.Slot;
@@ -202,7 +203,7 @@ private static IAEItemStack[] collectInventory(Slot[] slots) {
202203
}
203204

204205
@Override
205-
public void acceptPattern(HashMap<Integer, ItemStack[]> inputs, ItemStack[] outputs, boolean combine) {
206+
public void acceptPattern(Int2ObjectMap<ItemStack[]> inputs, ItemStack[] outputs, boolean combine) {
206207
if (Ae2Reflect.getPart(this) instanceof PartFluidPatternTerminal) {
207208
((PartFluidPatternTerminal) Ae2Reflect.getPart(this)).onChangeCrafting(inputs, outputs, combine);
208209
}

src/main/java/com/glodblock/github/common/component/DualityDualInterface.java

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.glodblock.github.common.component;
22

3+
import appeng.api.AEApi;
34
import appeng.api.config.Actionable;
45
import appeng.api.config.Upgrades;
6+
import appeng.api.definitions.IMaterials;
57
import appeng.api.networking.IGridNode;
68
import appeng.api.networking.crafting.ICraftingLink;
79
import appeng.api.networking.crafting.ICraftingPatternDetails;
@@ -12,20 +14,29 @@
1214
import appeng.api.networking.ticking.TickingRequest;
1315
import appeng.api.storage.data.IAEItemStack;
1416
import appeng.api.util.IConfigManager;
17+
import appeng.core.localization.PlayerMessages;
1518
import appeng.fluids.helper.DualityFluidInterface;
1619
import appeng.fluids.helper.IFluidInterfaceHost;
20+
import appeng.fluids.util.AEFluidInventory;
1721
import appeng.helpers.DualityInterface;
1822
import appeng.helpers.IInterfaceHost;
23+
import appeng.items.misc.ItemEncodedPattern;
1924
import appeng.me.helpers.AENetworkProxy;
25+
import appeng.tile.inventory.AppEngInternalInventory;
26+
import appeng.util.Platform;
27+
import appeng.util.SettingsFrom;
2028
import appeng.util.inv.InvOperation;
2129
import com.google.common.collect.ImmutableSet;
30+
import net.minecraft.entity.player.EntityPlayer;
2231
import net.minecraft.inventory.InventoryCrafting;
2332
import net.minecraft.item.ItemStack;
2433
import net.minecraft.nbt.NBTTagCompound;
2534
import net.minecraft.util.EnumFacing;
2635
import net.minecraftforge.common.capabilities.Capability;
2736
import net.minecraftforge.common.capabilities.ICapabilityProvider;
37+
import net.minecraftforge.fluids.capability.IFluidHandler;
2838
import net.minecraftforge.items.IItemHandler;
39+
import net.minecraftforge.items.wrapper.PlayerMainInvWrapper;
2940

3041
import javax.annotation.Nonnull;
3142
import javax.annotation.Nullable;
@@ -186,4 +197,66 @@ public void readFromNBT(final NBTTagCompound data) {
186197
fluidDuality.readFromNBT(data.getCompoundTag("fluidDuality"));
187198
}
188199

200+
public NBTTagCompound downloadSettings(SettingsFrom from) {
201+
NBTTagCompound tag = new NBTTagCompound();
202+
if (from == SettingsFrom.MEMORY_CARD) {
203+
final IItemHandler inv = this.getItemInventoryByName("item_patterns");
204+
if (inv instanceof AppEngInternalInventory) {
205+
((AppEngInternalInventory) inv).writeToNBT(tag, "item_patterns");
206+
}
207+
final IFluidHandler fluidInv = this.fluidDuality.getFluidInventoryByName("config");
208+
if (fluidInv instanceof AEFluidInventory) {
209+
((AEFluidInventory) fluidInv).writeToNBT(tag, "fluid_config");
210+
}
211+
}
212+
return tag;
213+
}
214+
215+
public void uploadSettings(NBTTagCompound compound, EntityPlayer player) {
216+
final IItemHandler inv = this.getItemInventoryByName("item_patterns");
217+
if (inv instanceof AppEngInternalInventory) {
218+
final AppEngInternalInventory target = (AppEngInternalInventory) inv;
219+
AppEngInternalInventory tmp = new AppEngInternalInventory(null, target.getSlots());
220+
tmp.readFromNBT(compound, "item_patterns");
221+
PlayerMainInvWrapper playerInv = new PlayerMainInvWrapper(player.inventory);
222+
final IMaterials materials = AEApi.instance().definitions().materials();
223+
int missingPatternsToEncode = 0;
224+
225+
for (int i = 0; i < inv.getSlots(); i++) {
226+
if (target.getStackInSlot(i).getItem() instanceof ItemEncodedPattern) {
227+
ItemStack blank = materials.blankPattern().maybeStack(target.getStackInSlot(i).getCount()).get();
228+
if (!player.addItemStackToInventory(blank)) {
229+
player.dropItem(blank, true);
230+
}
231+
target.setStackInSlot(i, ItemStack.EMPTY);
232+
}
233+
}
234+
235+
236+
for (int x = 0; x < tmp.getSlots(); x++) {
237+
if (!tmp.getStackInSlot(x).isEmpty()) {
238+
boolean found = false;
239+
for (int i = 0; i < playerInv.getSlots(); i++) {
240+
if (materials.blankPattern().isSameAs(playerInv.getStackInSlot(i))) {
241+
target.setStackInSlot(x, tmp.getStackInSlot(x));
242+
playerInv.getStackInSlot(i).shrink(1);
243+
found = true;
244+
break;
245+
}
246+
}
247+
if (!found) {
248+
missingPatternsToEncode++;
249+
}
250+
}
251+
}
252+
if (Platform.isServer() && missingPatternsToEncode > 0) {
253+
player.sendMessage(PlayerMessages.MissingPatternsToEncode.get());
254+
}
255+
}
256+
final IFluidHandler fluidInv = this.fluidDuality.getFluidInventoryByName("config");
257+
if (fluidInv instanceof AEFluidInventory) {
258+
((AEFluidInventory) fluidInv).readFromNBT(compound, "fluid_config");
259+
}
260+
}
261+
189262
}

src/main/java/com/glodblock/github/common/part/PartDualInterface.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import appeng.parts.PartBasicState;
2727
import appeng.parts.PartModel;
2828
import appeng.util.Platform;
29+
import appeng.util.SettingsFrom;
2930
import appeng.util.inv.IAEAppEngInventory;
3031
import appeng.util.inv.IInventoryDestination;
3132
import appeng.util.inv.InvOperation;
@@ -264,4 +265,20 @@ public IPartModel getStaticModels() {
264265
}
265266
}
266267

268+
@Override
269+
public NBTTagCompound downloadSettings(SettingsFrom from) {
270+
NBTTagCompound pre = super.downloadSettings(from);
271+
NBTTagCompound tag = pre == null ? new NBTTagCompound() : pre;
272+
tag.setTag("pattern", this.duality.downloadSettings(from));
273+
return tag.isEmpty() ? null : tag;
274+
}
275+
276+
@Override
277+
public void uploadSettings(SettingsFrom from, NBTTagCompound compound, EntityPlayer player) {
278+
super.uploadSettings(from, compound, player);
279+
if (compound.hasKey("pattern")) {
280+
this.duality.uploadSettings(compound.getCompoundTag("pattern"), player);
281+
}
282+
}
283+
267284
}

src/main/java/com/glodblock/github/common/part/PartExtendedFluidPatternTerminal.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.glodblock.github.inventory.GuiType;
2020
import com.glodblock.github.inventory.InventoryHandler;
2121
import com.glodblock.github.util.Util;
22+
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
2223
import net.minecraft.entity.player.EntityPlayer;
2324
import net.minecraft.item.ItemStack;
2425
import net.minecraft.nbt.NBTTagCompound;
@@ -31,7 +32,6 @@
3132
import net.minecraftforge.items.IItemHandlerModifiable;
3233

3334
import javax.annotation.Nonnull;
34-
import java.util.HashMap;
3535

3636
public class PartExtendedFluidPatternTerminal extends PartExpandedProcessingPatternTerminal {
3737

@@ -125,7 +125,7 @@ public void onChangeInventory(IItemHandler inv, int slot, InvOperation mc, ItemS
125125
super.onChangeInventory(inv, slot, mc, removedStack, newStack);
126126
}
127127

128-
public void onChangeCrafting(HashMap<Integer, ItemStack[]> inputs, ItemStack[] outputs, boolean combine) {
128+
public void onChangeCrafting(Int2ObjectMap<ItemStack[]> inputs, ItemStack[] outputs, boolean combine) {
129129
IItemHandler crafting = this.getInventoryByName("crafting");
130130
IItemHandler output = this.getInventoryByName("output");
131131
IItemList<IAEItemStack> storageList = this.getInventory(Util.ITEM) == null ?

src/main/java/com/glodblock/github/common/part/PartFluidPatternTerminal.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import com.glodblock.github.inventory.InventoryHandler;
2323
import com.glodblock.github.util.FluidCraftingPatternDetails;
2424
import com.glodblock.github.util.Util;
25+
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
2526
import net.minecraft.entity.player.EntityPlayer;
2627
import net.minecraft.item.ItemStack;
2728
import net.minecraft.nbt.NBTTagCompound;
@@ -34,7 +35,6 @@
3435
import net.minecraftforge.items.IItemHandlerModifiable;
3536

3637
import javax.annotation.Nonnull;
37-
import java.util.HashMap;
3838

3939
public class PartFluidPatternTerminal extends PartPatternTerminal {
4040

@@ -168,7 +168,7 @@ public void putPattern(IAEItemStack[] inputs, IAEItemStack[] outputs) {
168168
}
169169
}
170170

171-
public void onChangeCrafting(HashMap<Integer, ItemStack[]> inputs, ItemStack[] outputs, boolean combine) {
171+
public void onChangeCrafting(Int2ObjectMap<ItemStack[]> inputs, ItemStack[] outputs, boolean combine) {
172172
IItemHandler crafting = this.getInventoryByName("crafting");
173173
IItemHandler output = this.getInventoryByName("output");
174174
IItemList<IAEItemStack> storageList = this.getInventory(Util.ITEM) == null ?

src/main/java/com/glodblock/github/common/tile/TileDualInterface.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import appeng.helpers.IInterfaceHost;
2424
import appeng.tile.grid.AENetworkInvTile;
2525
import appeng.util.Platform;
26+
import appeng.util.SettingsFrom;
2627
import appeng.util.inv.IInventoryDestination;
2728
import appeng.util.inv.InvOperation;
2829
import com.glodblock.github.common.component.DualityDualInterface;
@@ -31,6 +32,7 @@
3132
import com.glodblock.github.loader.FCBlocks;
3233
import com.google.common.collect.ImmutableSet;
3334
import io.netty.buffer.ByteBuf;
35+
import net.minecraft.entity.player.EntityPlayer;
3436
import net.minecraft.inventory.InventoryCrafting;
3537
import net.minecraft.item.ItemStack;
3638
import net.minecraft.nbt.NBTTagCompound;
@@ -125,7 +127,6 @@ public void gridChanged() {
125127
@Override
126128
public void onReady() {
127129
this.configureNodeSides();
128-
129130
super.onReady();
130131
duality.initialize();
131132
}
@@ -306,4 +307,20 @@ public GuiType getGuiType() {
306307
return GuiType.DUAL_ITEM_INTERFACE;
307308
}
308309

310+
@Override
311+
public NBTTagCompound downloadSettings(SettingsFrom from) {
312+
NBTTagCompound pre = super.downloadSettings(from);
313+
NBTTagCompound tag = pre == null ? new NBTTagCompound() : pre;
314+
tag.setTag("pattern", this.duality.downloadSettings(from));
315+
return tag.isEmpty() ? null : tag;
316+
}
317+
318+
@Override
319+
public void uploadSettings(SettingsFrom from, NBTTagCompound compound, EntityPlayer player) {
320+
super.uploadSettings(from, compound, player);
321+
if (compound.hasKey("pattern")) {
322+
this.duality.uploadSettings(compound.getCompoundTag("pattern"), player);
323+
}
324+
}
325+
309326
}

src/main/java/com/glodblock/github/common/tile/TileFluidAssembler.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import com.glodblock.github.util.FluidCraftingPatternDetails;
3333
import com.glodblock.github.util.Util;
3434
import io.netty.buffer.ByteBuf;
35+
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
3536
import net.minecraft.inventory.InventoryCrafting;
3637
import net.minecraft.item.ItemStack;
3738
import net.minecraft.nbt.NBTTagCompound;
@@ -47,21 +48,24 @@
4748
import javax.annotation.Nonnull;
4849
import javax.annotation.Nullable;
4950
import java.io.IOException;
50-
import java.util.*;
51+
import java.util.Arrays;
52+
import java.util.Iterator;
53+
import java.util.List;
54+
import java.util.Objects;
5155

5256
public class TileFluidAssembler extends AENetworkInvTile implements ICraftingProvider, ITickable {
5357

5458
public final AppEngInternalInventory invPatterns = new AppEngInternalInventory(this, 36, 1);
5559
public final AppEngInternalInventory upgrade = new AppEngInternalInventory(this, 2, 3);
5660
public final AppEngInternalInventory gridInv = new AppEngInternalInventory(this, 9, 1);
5761
public final AppEngInternalInventory output = new AppEngInternalInventory(this, 1);
58-
private List<ICraftingPatternDetails> craftingList = null;
62+
private ObjectArrayList<ICraftingPatternDetails> craftingList = null;
5963
private int progress = 0;
6064
private static final double powerUsage = 0.5D;
6165
public static final int TIME = 20;
6266
private ICraftingPatternDetails myPlan = null;
6367
private final IActionSource mySrc = new MachineSource(this);
64-
private List<ItemStack> waitingToSend = new ArrayList<>();
68+
private ObjectArrayList<ItemStack> waitingToSend = new ObjectArrayList<>();
6569

6670
@Reflected
6771
public TileFluidAssembler() {
@@ -88,7 +92,7 @@ private void addToCraftingList(final ItemStack is) {
8892

8993
if (details != null) {
9094
if (this.craftingList == null) {
91-
this.craftingList = new ArrayList<>();
95+
this.craftingList = new ObjectArrayList<>();
9296
}
9397
this.craftingList.add(details);
9498
}
@@ -210,7 +214,7 @@ public void readFromNBT(final NBTTagCompound data) {
210214
ItemStack pattern = new ItemStack(data.getCompoundTag("myPlan"));
211215
this.myPlan = FluidCraftingPatternDetails.GetFluidPattern(pattern, this.getWorld());
212216
}
213-
this.waitingToSend = new ArrayList<>();
217+
this.waitingToSend = new ObjectArrayList<>();
214218
final NBTTagList waitingList = data.getTagList("waitingToSend", 10);
215219
for (int x = 0; x < waitingList.tagCount(); x++) {
216220
final NBTTagCompound c = waitingList.getCompoundTagAt(x);
@@ -313,7 +317,7 @@ public void update() {
313317
}
314318
}
315319
if (!this.waitingToSend.isEmpty() && this.getProxy().isActive()) {
316-
List<ItemStack> rst = new ArrayList<>();
320+
ObjectArrayList<ItemStack> rst = new ObjectArrayList<>();
317321
try {
318322
IMEInventory<IAEItemStack> des = this.getProxy().getStorage().getInventory(Util.ITEM);
319323
final IEnergySource src = this.getProxy().getEnergy();
@@ -361,7 +365,7 @@ public void getDrops(final World w, final BlockPos pos, final List<ItemStack> dr
361365
}
362366

363367
public void dropExcessPatterns() {
364-
List<ItemStack> dropList = new ArrayList<>();
368+
ObjectArrayList<ItemStack> dropList = new ObjectArrayList<>();
365369
for (int invSlot = 0; invSlot < this.invPatterns.getSlots(); invSlot++) {
366370
if (invSlot > 8 + getPatternCap() * 9) {
367371
ItemStack is = this.invPatterns.getStackInSlot(invSlot);

0 commit comments

Comments
 (0)