Skip to content

Commit

Permalink
dirty fix for me invertory class cast issue
Browse files Browse the repository at this point in the history
  • Loading branch information
GlodBlock committed Aug 11, 2023
1 parent c0c39a1 commit 9510e40
Show file tree
Hide file tree
Showing 12 changed files with 103 additions and 23 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ dependencies {
deobfCompile 'curse.maven:modular-machinery-270790:2761302' // 1.11.1
deobfCompile 'curse.maven:codechicken-lib-1-8-242818:2779848' //ccl
deobfCompile 'curse.maven:gregtech-ce-unofficial-557242:3784798' // gt
deobfCompile 'curse.maven:ae2-extended-life-570458:4646658' //pae2
deobfCompile 'curse.maven:ae2-extended-life-570458:4688138' //pae2
deobfCompile 'curse.maven:dynamistics-383632:3056455' // dy
compileOnly 'curse.maven:opencomputers-223008:4630537' //oc
runtime 'curse.maven:opencomputers-223008:4630537' //oc
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,8 +129,8 @@ public void onChangeInventory(IItemHandler inv, int slot, InvOperation mc, ItemS
public void onChangeCrafting(Int2ObjectMap<ItemStack[]> inputs, List<ItemStack> outputs, boolean combine) {
IItemHandler crafting = this.getInventoryByName("crafting");
IItemHandler output = this.getInventoryByName("output");
IItemList<IAEItemStack> storageList = this.getInventory(Util.ITEM) == null ?
null : this.getInventory(Util.ITEM).getStorageList();
IItemList<IAEItemStack> storageList = this.getInventory(Util.getItemChannel()) == null ?
null : this.getInventory(Util.getItemChannel()).getStorageList();
if (crafting instanceof AppEngInternalInventory && output instanceof AppEngInternalInventory) {
Util.clearItemInventory((IItemHandlerModifiable) crafting);
Util.clearItemInventory((IItemHandlerModifiable) output);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -172,8 +172,8 @@ public void putPattern(IAEItemStack[] inputs, IAEItemStack[] outputs) {
public void onChangeCrafting(Int2ObjectMap<ItemStack[]> inputs, List<ItemStack> outputs, boolean combine) {
IItemHandler crafting = this.getInventoryByName("crafting");
IItemHandler output = this.getInventoryByName("output");
IItemList<IAEItemStack> storageList = this.getInventory(Util.ITEM) == null ?
null : this.getInventory(Util.ITEM).getStorageList();
IItemList<IAEItemStack> storageList = this.getInventory(Util.getItemChannel()) == null ?
null : this.getInventory(Util.getItemChannel()).getStorageList();
if (crafting instanceof AppEngInternalInventory && output instanceof AppEngInternalInventory) {
Util.clearItemInventory((IItemHandlerModifiable) crafting);
Util.clearItemInventory((IItemHandlerModifiable) output);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -319,7 +319,7 @@ public void update() {
if (!this.waitingToSend.isEmpty() && this.getProxy().isActive()) {
ObjectArrayList<ItemStack> rst = new ObjectArrayList<>();
try {
IMEInventory<IAEItemStack> des = this.getProxy().getStorage().getInventory(Util.ITEM);
IMEInventory<IAEItemStack> des = this.getProxy().getStorage().getInventory(Util.getItemChannel());
final IEnergySource src = this.getProxy().getEnergy();
for (ItemStack item : this.waitingToSend) {
if (item != null && !item.isEmpty()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import appeng.api.storage.*;
import appeng.api.storage.data.IAEFluidStack;
import appeng.api.storage.data.IAEItemStack;
import appeng.api.storage.data.IAEStack;
import appeng.api.storage.data.IItemList;
import appeng.helpers.Reflected;
import appeng.me.GridAccessException;
Expand Down Expand Up @@ -53,9 +54,9 @@ public int getPriority() {
@Override
public List<IMEInventoryHandler> getCellArray(IStorageChannel<?> channel) {
if (getProxy().isActive()) {
if (channel == Util.ITEM) {
if (channel == Util.getItemChannel()) {
return Collections.singletonList(fluidDropInv.invHandler);
} else if (channel == Util.FLUID) {
} else if (channel == Util.getFluidChannel()) {
return Collections.singletonList(fluidCraftInv.invHandler);
}
}
Expand Down Expand Up @@ -120,7 +121,7 @@ private IEnergyGrid getEnergyGrid() {
private IMEMonitor<IAEFluidStack> getFluidGrid() {
try {
return getProxy().getGrid().<IStorageGrid>getCache(IStorageGrid.class)
.getInventory(Util.FLUID);
.getInventory(Util.getFluidChannel());
} catch (GridAccessException e) {
return null;
}
Expand Down Expand Up @@ -231,22 +232,27 @@ public void onListUpdate() {

@Override
public IStorageChannel<IAEItemStack> getChannel() {
return Util.ITEM;
return Util.getItemChannel();
}

}

private class FluidCraftingInventory implements IMEInventory<IAEFluidStack> {
@SuppressWarnings({"rawtypes", "unchecked"})
private class FluidCraftingInventory implements IMEInventory {

private final MEInventoryHandler<IAEFluidStack> invHandler = new MEInventoryHandler<>(this, getChannel());
private final MEInventoryHandler invHandler = new MEInventoryHandler<>(this, this.getChannel());

FluidCraftingInventory() {
invHandler.setPriority(Integer.MAX_VALUE);
}

@Nullable
@Override
public IAEFluidStack injectItems(IAEFluidStack input, Actionable type, IActionSource src) {
public IAEStack injectItems(IAEStack aeStack, Actionable type, IActionSource src) {
if (!(aeStack instanceof IAEFluidStack)) {
return null;
}
IAEFluidStack input = (IAEFluidStack) aeStack;
ICraftingGrid craftingGrid;
try {
craftingGrid = getProxy().getGrid().getCache(ICraftingGrid.class);
Expand All @@ -265,18 +271,18 @@ public IAEFluidStack injectItems(IAEFluidStack input, Actionable type, IActionSo

@Nullable
@Override
public IAEFluidStack extractItems(IAEFluidStack request, Actionable mode, IActionSource src) {
public IAEStack extractItems(IAEStack request, Actionable mode, IActionSource src) {
return null;
}

@Override
public IItemList<IAEFluidStack> getAvailableItems(IItemList<IAEFluidStack> out) {
public IItemList getAvailableItems(IItemList out) {
return out;
}

@Override
public IStorageChannel<IAEFluidStack> getChannel() {
return Util.FLUID;
return Util.getFluidChannel();
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ public long[] getRequest() {

@MENetworkEventSubscribe
public void onStorageUpdate(MENetworkStorageEvent event) {
if (event.channel.equals(Util.FLUID)) {
if (event.channel.equals(Util.getFluidChannel())) {
doWork();
}
}
Expand Down Expand Up @@ -189,7 +189,7 @@ public NBTTagCompound writeToNBT(NBTTagCompound data) {

private IMEMonitor<IAEFluidStack> getFluidMonitor() {
return getProxy().getNode().getGrid().<IStorageGrid>getCache(IStorageGrid.class)
.getInventory(Util.FLUID);
.getInventory(Util.getFluidChannel());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ public TickRateModulation tickingRequest(@Nonnull IGridNode node, int ticksSince
IAEFluidStack aeFluid = AEFluidStack.fromFluidStack(fluid);
IEnergyGrid energyGrid = node.getGrid().getCache(IEnergyGrid.class);
IMEMonitor<IAEFluidStack> fluidGrid = node.getGrid().<IStorageGrid>getCache(IStorageGrid.class)
.getInventory(Util.FLUID);
.getInventory(Util.getFluidChannel());
IAEFluidStack remaining = Platform.poweredInsert(energyGrid, fluidGrid, aeFluid, ownActionSource);
if (remaining != null) {
if (remaining.getStackSize() == aeFluid.getStackSize()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@
public class TileFluidPatternEncoder extends AEBaseTile implements IAEAppEngInventory {

private final AppEngInternalInventory patternInv = new AppEngInternalInventory(this, 2);
private final AeStackInventoryImpl<IAEItemStack> crafting = new AeStackInventoryImpl<>(Util.ITEM, 9, this);
private final AeStackInventoryImpl<IAEItemStack> output = new AeStackInventoryImpl<>(Util.ITEM, 3, this);
private final AeStackInventoryImpl<IAEItemStack> crafting = new AeStackInventoryImpl<>(Util.getItemChannel(), 9, this);
private final AeStackInventoryImpl<IAEItemStack> output = new AeStackInventoryImpl<>(Util.getItemChannel(), 3, this);

public IItemHandlerModifiable getInventory() {
return patternInv;
Expand Down
9 changes: 9 additions & 0 deletions src/main/java/com/glodblock/github/coremod/CoreModHooks.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import appeng.api.networking.IMachineSet;
import appeng.api.networking.storage.IStorageGrid;
import appeng.api.storage.IMEInventory;
import appeng.api.storage.IMEInventoryHandler;
import appeng.api.storage.channels.IFluidStorageChannel;
import appeng.api.storage.channels.IItemStorageChannel;
import appeng.api.storage.data.IAEFluidStack;
Expand All @@ -20,6 +21,7 @@
import appeng.helpers.IInterfaceHost;
import appeng.me.MachineSet;
import appeng.me.cluster.implementations.CraftingCPUCluster;
import appeng.me.storage.NetworkInventoryHandler;
import appeng.parts.misc.PartInterface;
import appeng.tile.misc.TileInterface;
import appeng.util.InventoryAdaptor;
Expand Down Expand Up @@ -270,4 +272,11 @@ public static ItemStack transformPattern(ContainerPatternEncoder container, Item
return output;
}

@SuppressWarnings({"rawtypes", "unchecked"})
public static void safeMEInventoryCheck(NetworkInventoryHandler network, IMEInventoryHandler handler) {
if (network.getChannel() == handler.getChannel()) {
network.addNewStorage(handler);
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,9 @@ public byte[] transform(String name, String transformedName, byte[] code) {
case "appeng.container.implementations.ContainerPatternEncoder":
tform = ContainerPatternEncoderTransformer.INSTANCE;
break;
case "appeng.me.cache.GridStorageCache":
tform = GridStorageCacheTransformer.INSTANCE;
break;
default:
return code;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package com.glodblock.github.coremod.transform;

import com.glodblock.github.coremod.FCClassTransformer;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;

public class GridStorageCacheTransformer extends FCClassTransformer.ClassMapper {

public static final GridStorageCacheTransformer INSTANCE = new GridStorageCacheTransformer();

private GridStorageCacheTransformer() {
// NO-OP
}

@Override
protected ClassVisitor getClassMapper(ClassVisitor downstream) {
return new TransformGridStorageCache(Opcodes.ASM5, downstream);
}

private static class TransformGridStorageCache extends ClassVisitor {

public TransformGridStorageCache(int api, ClassVisitor cv) {
super(api, cv);
}

@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
if (name.equals("buildNetworkStorage")) {
return new TransformBuildNetworkStorage(api, super.visitMethod(access, name, desc, signature, exceptions));
}
return super.visitMethod(access, name, desc, signature, exceptions);
}

}

private static class TransformBuildNetworkStorage extends MethodVisitor {

public TransformBuildNetworkStorage(int api, MethodVisitor mv) {
super(api, mv);
}

@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) {
if (name.equals("addNewStorage")) {
super.visitMethodInsn(Opcodes.INVOKESTATIC,
"com/glodblock/github/coremod/CoreModHooks",
"safeMEInventoryCheck",
"(Lappeng/me/storage/NetworkInventoryHandler;Lappeng/api/storage/IMEInventoryHandler;)V",
false);
} else {
super.visitMethodInsn(opcode, owner, name, desc, itf);
}
}

}
}
9 changes: 7 additions & 2 deletions src/main/java/com/glodblock/github/util/Util.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,13 @@

public final class Util {

public static final IStorageChannel<IAEItemStack> ITEM = AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class);
public static final IStorageChannel<IAEFluidStack> FLUID = AEApi.instance().storage().getStorageChannel(IFluidStorageChannel.class);
public static IStorageChannel<IAEFluidStack> getFluidChannel() {
return AEApi.instance().storage().getStorageChannel(IFluidStorageChannel.class);
}

public static IStorageChannel<IAEItemStack> getItemChannel() {
return AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class);
}

public static FluidStack getFluidFromItem(ItemStack stack) {
if (!stack.isEmpty() && stack.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null)) {
Expand Down

0 comments on commit 9510e40

Please sign in to comment.