Skip to content
This repository has been archived by the owner on Feb 27, 2024. It is now read-only.

Commit

Permalink
add generics and make code reusable for Inventories that are not IInv…
Browse files Browse the repository at this point in the history
…entory
  • Loading branch information
Faithcaio committed Nov 8, 2017
1 parent d4f9036 commit b4706e0
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 31 deletions.
2 changes: 1 addition & 1 deletion SpongeCommon
Original file line number Diff line number Diff line change
Expand Up @@ -24,22 +24,15 @@
*/
package org.spongepowered.mod.item.inventory.adapter;

import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.IItemHandler;
import org.spongepowered.common.item.inventory.adapter.InventoryAdapter;
import org.spongepowered.common.item.inventory.lens.Lens;

public class IItemHandlerAdapter implements InventoryAdapter<IItemHandler, net.minecraft.item.ItemStack> {
private final IItemHandler inventory;
import org.spongepowered.common.item.inventory.adapter.impl.ItemStackInventoryAdapter;
import org.spongepowered.mod.item.inventory.fabric.IItemHandlerFabric;

/**
* Basic Wrapper Adapter for {@link IItemHandler}
*/
public class IItemHandlerAdapter extends ItemStackInventoryAdapter<IItemHandler> {
public IItemHandlerAdapter(IItemHandler inventory) {
this.inventory = inventory;
}

private static Lens<IInventory, ItemStack> generateLens(IItemHandler inventory) {
return null;
super(new IItemHandlerFabric(inventory));
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
import org.spongepowered.common.interfaces.IMixinInventory;
import org.spongepowered.common.item.inventory.EmptyInventoryImpl;
import org.spongepowered.common.item.inventory.util.InventoryUtil;
import org.spongepowered.mod.item.inventory.adapter.IItemHandlerAdapter;

import javax.annotation.Nullable;

Expand Down Expand Up @@ -84,10 +85,17 @@ private static void onTransferItemsOut(TileEntityHopper hopper, CallbackInfoRetu
@Inject(remap = false, method = "extractHook", cancellable = true, locals = LocalCapture.CAPTURE_FAILEXCEPTION,
at = @At(value = "INVOKE", target = "Lorg/apache/commons/lang3/tuple/Pair;getKey()Ljava/lang/Object;"))
private static void onExtractHook(IHopper hopper, CallbackInfoReturnable<Boolean> cir, Pair<IItemHandler, Object> itemHandlerResult) {
Inventory source = toInventory(itemHandlerResult.getValue(), itemHandlerResult.getKey());
if (source.totalItems() != 0) {
if (SpongeCommonEventFactory.callTransferPre(source, toInventory(hopper)).isCancelled()) {
cir.setReturnValue(false);
IItemHandler itemHandler = itemHandlerResult.getKey();
for (int i = 0; i < itemHandler.getSlots(); i++) {
// Find first item that can be extracted
if (!itemHandler.extractItem(i, 1, true).isEmpty()) {
Inventory source = toInventory(itemHandlerResult.getValue(), itemHandler);
if (source.totalItems() != 0) {
if (SpongeCommonEventFactory.callTransferPre(source, toInventory(hopper)).isCancelled()) {
cir.setReturnValue(false);
}
}
break;
}
}
}
Expand Down Expand Up @@ -192,8 +200,7 @@ private static Inventory toInventory(Object te, IItemHandler itemHandler) {
if (itemHandler instanceof Inventory) {
return ((Inventory) itemHandler);
}
// TODO handle IItemHandlers that were not mixed into
return new EmptyInventoryImpl(null);
return new IItemHandlerAdapter(itemHandler);
}

private static IMixinInventory forCapture(Object toCapture) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,6 @@
import org.spongepowered.asm.mixin.Interface;
import org.spongepowered.asm.mixin.Intrinsic;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.common.interfaces.IMixinInventory;
import org.spongepowered.common.item.inventory.EmptyInventoryImpl;
import org.spongepowered.common.item.inventory.adapter.impl.MinecraftInventoryAdapter;
Expand All @@ -48,14 +45,13 @@
import org.spongepowered.common.item.inventory.lens.impl.collections.SlotCollection;
import org.spongepowered.common.item.inventory.lens.impl.comp.OrderedInventoryLensImpl;
import org.spongepowered.mod.item.inventory.fabric.IItemHandlerFabric;
import org.spongepowered.mod.item.inventory.fabric.InvWrapperFabric;

import java.util.ArrayList;
import java.util.List;

@Mixin(InvWrapper.class)
@Implements(@Interface(iface = Inventory.class, prefix = "inventory$"))
public abstract class MixinInvWrapper implements MinecraftInventoryAdapter, IMixinInventory {
public abstract class MixinInvWrapper implements MinecraftInventoryAdapter<IInventory>, IMixinInventory {

protected EmptyInventory empty;
protected Inventory parent;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,6 @@
import org.spongepowered.asm.mixin.Interface;
import org.spongepowered.asm.mixin.Intrinsic;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.common.interfaces.IMixinInventory;
import org.spongepowered.common.item.inventory.EmptyInventoryImpl;
import org.spongepowered.common.item.inventory.adapter.impl.MinecraftInventoryAdapter;
Expand All @@ -48,14 +45,13 @@
import org.spongepowered.common.item.inventory.lens.impl.collections.SlotCollection;
import org.spongepowered.common.item.inventory.lens.impl.comp.OrderedInventoryLensImpl;
import org.spongepowered.mod.item.inventory.fabric.IItemHandlerFabric;
import org.spongepowered.mod.item.inventory.fabric.ItemStackHandlerFabric;

import java.util.ArrayList;
import java.util.List;

@Mixin(ItemStackHandler.class)
@Implements(@Interface(iface = Inventory.class, prefix = "inventory$"))
public abstract class MixinItemStackHandler implements MinecraftInventoryAdapter, IMixinInventory {
public abstract class MixinItemStackHandler implements MinecraftInventoryAdapter<IInventory>, IMixinInventory {

protected EmptyInventory empty;
protected Inventory parent;
Expand Down

0 comments on commit b4706e0

Please sign in to comment.