Shift clicking work for all existing and implemented container inventories

This commit is contained in:
pahimar 2013-05-14 21:07:52 -04:00
parent 59929c9c82
commit 3e65a04f1e
10 changed files with 131 additions and 68 deletions

View file

@ -79,15 +79,15 @@ public class BlockGlassBell extends BlockEE {
return false; return false;
else { else {
if (!world.isRemote) { if (!world.isRemote) {
TileGlassBell tileGlassBell = (TileGlassBell) world.getBlockTileEntity(x, y, z); TileEntity tileEntityGlassBell = world.getBlockTileEntity(x, y, z);
TileAludel tileAludel = (TileAludel) world.getBlockTileEntity(x, y - 1, z); TileEntity tileEntityAludel = world.getBlockTileEntity(x, y - 1, z);
if (tileAludel != null && tileGlassBell != null) { if (tileEntityAludel instanceof TileAludel && tileEntityGlassBell instanceof TileGlassBell) {
player.openGui(EquivalentExchange3.instance, GuiIds.ALUDEL, world, x, y - 1, z); player.openGui(EquivalentExchange3.instance, GuiIds.ALUDEL, world, x, y - 1, z);
return true; return true;
} }
if (tileGlassBell != null) { if (tileEntityGlassBell != null) {
player.openGui(EquivalentExchange3.instance, GuiIds.GLASS_BELL, world, x, y, z); player.openGui(EquivalentExchange3.instance, GuiIds.GLASS_BELL, world, x, y, z);
} }
} }

View file

@ -77,7 +77,7 @@ public class TileEntityAludelRenderer extends TileEntitySpecialRenderer {
TileEntity tileGlassBell = tileAludel.worldObj.getBlockTileEntity(tileAludel.xCoord, tileAludel.yCoord + 1, tileAludel.zCoord); TileEntity tileGlassBell = tileAludel.worldObj.getBlockTileEntity(tileAludel.xCoord, tileAludel.yCoord + 1, tileAludel.zCoord);
if (tileGlassBell != null && tileGlassBell instanceof TileGlassBell) { if (tileGlassBell instanceof TileGlassBell) {
if (tileAludel.getStackInSlot(TileAludel.INPUT_INVENTORY_INDEX) != null) { if (tileAludel.getStackInSlot(TileAludel.INPUT_INVENTORY_INDEX) != null) {
float scaleFactor = getGhostItemScaleFactor(tileAludel.getStackInSlot(TileAludel.INPUT_INVENTORY_INDEX)); float scaleFactor = getGhostItemScaleFactor(tileAludel.getStackInSlot(TileAludel.INPUT_INVENTORY_INDEX));

View file

@ -48,7 +48,7 @@ public class TileEntityCalcinatorRenderer extends TileEntitySpecialRenderer {
// Render // Render
modelCalcinator.renderPart("Calcinator"); modelCalcinator.renderPart("Calcinator");
if (tileCalcinator.getStackInSlot(TileCalcinator.DUST_INVENTORY_INDEX) != null) { if (tileCalcinator.getStackInSlot(TileCalcinator.OUTPUT_INVENTORY_INDEX) != null) {
modelCalcinator.renderPart("Dust"); modelCalcinator.renderPart("Dust");
} }

View file

@ -19,18 +19,24 @@ import com.pahimar.ee3.lib.Strings;
* *
*/ */
public class ContainerAlchemicalBag extends Container { public class ContainerAlchemicalBag extends Container {
private final int BAG_INVENTORY_ROWS = 4;
private final int BAG_INVENTORY_COLUMNS = 13;
private final int PLAYER_INVENTORY_ROWS = 3;
private final int PLAYER_INVENTORY_COLUMNS = 9;
public ContainerAlchemicalBag(InventoryPlayer inventoryPlayer) { public ContainerAlchemicalBag(InventoryPlayer inventoryPlayer) {
// Add the player's inventory slots to the container // Add the player's inventory slots to the container
for (int inventoryRowIndex = 0; inventoryRowIndex < 3; ++inventoryRowIndex) { for (int inventoryRowIndex = 0; inventoryRowIndex < PLAYER_INVENTORY_ROWS; ++inventoryRowIndex) {
for (int inventoryColumnIndex = 0; inventoryColumnIndex < 9; ++inventoryColumnIndex) { for (int inventoryColumnIndex = 0; inventoryColumnIndex < PLAYER_INVENTORY_COLUMNS; ++inventoryColumnIndex) {
this.addSlotToContainer(new Slot(inventoryPlayer, inventoryColumnIndex + inventoryRowIndex * 9 + 9, 44 + inventoryColumnIndex * 18, 104 + inventoryRowIndex * 18)); this.addSlotToContainer(new Slot(inventoryPlayer, inventoryColumnIndex + inventoryRowIndex * PLAYER_INVENTORY_COLUMNS + PLAYER_INVENTORY_COLUMNS, 44 + inventoryColumnIndex * 18, 104 + inventoryRowIndex * 18));
} }
} }
// Add the player's action bar slots to the container // Add the player's action bar slots to the container
for (int actionBarSlotIndex = 0; actionBarSlotIndex < 9; ++actionBarSlotIndex) { for (int actionBarSlotIndex = 0; actionBarSlotIndex < PLAYER_INVENTORY_COLUMNS; ++actionBarSlotIndex) {
this.addSlotToContainer(new Slot(inventoryPlayer, actionBarSlotIndex, 44 + actionBarSlotIndex * 18, 162)); this.addSlotToContainer(new Slot(inventoryPlayer, actionBarSlotIndex, 44 + actionBarSlotIndex * 18, 162));
} }
} }
@ -57,4 +63,32 @@ public class ContainerAlchemicalBag extends Container {
} }
} }
} }
@Override
public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int slotIndex) {
ItemStack newItemStack = null;
Slot slot = (Slot) inventorySlots.get(slotIndex);
if (slot != null && slot.getHasStack()) {
ItemStack itemStack = slot.getStack();
newItemStack = itemStack.copy();
if (slotIndex < BAG_INVENTORY_ROWS * BAG_INVENTORY_COLUMNS) {
if (!this.mergeItemStack(itemStack, BAG_INVENTORY_ROWS * BAG_INVENTORY_COLUMNS, inventorySlots.size(), false))
return null;
}
else if (!this.mergeItemStack(itemStack, 0, BAG_INVENTORY_ROWS * BAG_INVENTORY_COLUMNS, false))
return null;
if (itemStack.stackSize == 0) {
slot.putStack((ItemStack) null);
}
else {
slot.onSlotChanged();
}
}
return newItemStack;
}
} }

View file

@ -80,7 +80,7 @@ public class ContainerAlchemicalChest extends Container {
newItemStack = itemStack.copy(); newItemStack = itemStack.copy();
if (slotIndex < CHEST_INVENTORY_ROWS * CHEST_INVENTORY_COLUMNS) { if (slotIndex < CHEST_INVENTORY_ROWS * CHEST_INVENTORY_COLUMNS) {
if (!this.mergeItemStack(itemStack, CHEST_INVENTORY_ROWS * CHEST_INVENTORY_COLUMNS, inventorySlots.size(), true)) if (!this.mergeItemStack(itemStack, CHEST_INVENTORY_ROWS * CHEST_INVENTORY_COLUMNS, inventorySlots.size(), false))
return null; return null;
} }
else if (!this.mergeItemStack(itemStack, 0, CHEST_INVENTORY_ROWS * CHEST_INVENTORY_COLUMNS, false)) else if (!this.mergeItemStack(itemStack, 0, CHEST_INVENTORY_ROWS * CHEST_INVENTORY_COLUMNS, false))

View file

@ -5,7 +5,9 @@ import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container; import net.minecraft.inventory.Container;
import net.minecraft.inventory.Slot; import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntityFurnace;
import com.pahimar.ee3.item.ItemAlchemicalDust;
import com.pahimar.ee3.tileentity.TileAludel; import com.pahimar.ee3.tileentity.TileAludel;
/** /**
@ -24,9 +26,9 @@ public class ContainerAludel extends Container {
public ContainerAludel(InventoryPlayer inventoryPlayer, TileAludel tileAludel) { public ContainerAludel(InventoryPlayer inventoryPlayer, TileAludel tileAludel) {
this.addSlotToContainer(new Slot(tileAludel, TileAludel.FUEL_INVENTORY_INDEX, 44, 74));
this.addSlotToContainer(new Slot(tileAludel, TileAludel.INPUT_INVENTORY_INDEX, 44, 18)); this.addSlotToContainer(new Slot(tileAludel, TileAludel.INPUT_INVENTORY_INDEX, 44, 18));
this.addSlotToContainer(new Slot(tileAludel, TileAludel.DUST_INVENTORY_INDEX, 44, 39)); this.addSlotToContainer(new Slot(tileAludel, TileAludel.DUST_INVENTORY_INDEX, 44, 39));
this.addSlotToContainer(new Slot(tileAludel, TileAludel.FUEL_INVENTORY_INDEX, 44, 74));
this.addSlotToContainer(new Slot(tileAludel, TileAludel.OUTPUT_INVENTORY_INDEX, 120, 39)); this.addSlotToContainer(new Slot(tileAludel, TileAludel.OUTPUT_INVENTORY_INDEX, 120, 39));
// Add the player's inventory slots to the container // Add the player's inventory slots to the container
@ -54,22 +56,47 @@ public class ContainerAludel extends Container {
ItemStack itemStack = null; ItemStack itemStack = null;
Slot slot = (Slot) inventorySlots.get(slotIndex); Slot slot = (Slot) inventorySlots.get(slotIndex);
if (slot != null && slot.getHasStack()) if (slot != null && slot.getHasStack()) {
{
ItemStack slotItemStack = slot.getStack(); ItemStack slotItemStack = slot.getStack();
itemStack = slotItemStack.copy(); itemStack = slotItemStack.copy();
/**
* If we are shift-clicking an item out of the Aludel's container, attempt to put it in the first available slot in the
* player's inventory
*/
if (slotIndex < TileAludel.INVENTORY_SIZE) { if (slotIndex < TileAludel.INVENTORY_SIZE) {
if (!this.mergeItemStack(slotItemStack, TileAludel.INVENTORY_SIZE + 1, inventorySlots.size(), true)) { if (!this.mergeItemStack(slotItemStack, TileAludel.INVENTORY_SIZE, inventorySlots.size(), false)) {
return null; return null;
} }
} }
else { else {
/*
* TODO: Depending on the slowItemStack, attempt to merge it into acceptable slots /**
* If the stack being shift-clicked into the Aludel's container is a fuel, first try to put it in the fuel slot.
* If it cannot be merged into the fuel slot, try to put it in the input slot.
*/ */
if (!this.mergeItemStack(slotItemStack, 0, TileAludel.INVENTORY_SIZE - 1, false)) { if (TileEntityFurnace.isItemFuel(slotItemStack)) {
if (!this.mergeItemStack(slotItemStack, TileAludel.FUEL_INVENTORY_INDEX, TileAludel.INPUT_INVENTORY_INDEX, false)) {
return null;
}
}
/**
* If the stack being shift-clicked into the Aludel's container is a dust, first try to put it in the dust slot.
* If it cannot be merged into the dust slot, try to put it in the input slot.
*/
else if (slotItemStack.getItem() instanceof ItemAlchemicalDust) {
if (!this.mergeItemStack(slotItemStack, TileAludel.DUST_INVENTORY_INDEX, TileAludel.OUTPUT_INVENTORY_INDEX, false)) {
return null;
}
}
/**
* Finally, attempt to put stack into the input slot
*/
else if (!this.mergeItemStack(slotItemStack, TileAludel.INPUT_INVENTORY_INDEX, TileAludel.DUST_INVENTORY_INDEX, false)) {
return null; return null;
} }
} }

View file

@ -8,6 +8,8 @@ import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.item.crafting.FurnaceRecipes;
import net.minecraft.tileentity.TileEntityFurnace; import net.minecraft.tileentity.TileEntityFurnace;
import com.pahimar.ee3.item.ItemAlchemicalDust;
import com.pahimar.ee3.tileentity.TileAludel;
import com.pahimar.ee3.tileentity.TileCalcinator; import com.pahimar.ee3.tileentity.TileCalcinator;
/** /**
@ -23,14 +25,14 @@ public class ContainerCalcinator extends Container {
public ContainerCalcinator(InventoryPlayer inventoryPlayer, TileCalcinator calcinator) { public ContainerCalcinator(InventoryPlayer inventoryPlayer, TileCalcinator calcinator) {
// Add the calcinator "to be calcined" slot to the container // Add the fuel slot to the container
this.addSlotToContainer(new Slot(calcinator, 0, 56, 17)); this.addSlotToContainer(new Slot(calcinator, TileCalcinator.FUEL_INVENTORY_INDEX, 56, 62));
// Add the input slot to the container
this.addSlotToContainer(new Slot(calcinator, TileCalcinator.INPUT_INVENTORY_INDEX, 56, 17));
// Add the calcinator fuel slot to the container // Add the output results slot to the container
this.addSlotToContainer(new Slot(calcinator, 1, 56, 62)); this.addSlotToContainer(new SlotCalcinator(calcinator, TileCalcinator.OUTPUT_INVENTORY_INDEX, 116, 35));
// Add the calcined results slot to the container
this.addSlotToContainer(new SlotCalcinator(calcinator, 2, 116, 35));
// Add the player's inventory slots to the container // Add the player's inventory slots to the container
for (int inventoryRowIndex = 0; inventoryRowIndex < 3; ++inventoryRowIndex) { for (int inventoryRowIndex = 0; inventoryRowIndex < 3; ++inventoryRowIndex) {
@ -51,56 +53,56 @@ public class ContainerCalcinator extends Container {
return true; return true;
} }
// TODO Write our own version - this is taken from ContainerFurnace
@Override @Override
public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int par2) { public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int slotIndex) {
ItemStack var3 = null; ItemStack itemStack = null;
Slot var4 = (Slot) inventorySlots.get(par2); Slot slot = (Slot) inventorySlots.get(slotIndex);
if (var4 != null && var4.getHasStack()) { if (slot != null && slot.getHasStack()) {
ItemStack var5 = var4.getStack();
var3 = var5.copy(); ItemStack slotItemStack = slot.getStack();
itemStack = slotItemStack.copy();
if (par2 == 2) { /**
if (!this.mergeItemStack(var5, 3, 39, true)) * If we are shift-clicking an item out of the Aludel's container, attempt to put it in the first available slot in the
* player's inventory
*/
if (slotIndex < TileCalcinator.INVENTORY_SIZE) {
if (!this.mergeItemStack(slotItemStack, TileCalcinator.INVENTORY_SIZE, inventorySlots.size(), false)) {
return null; return null;
var4.onSlotChange(var5, var3);
}
else if (par2 != 1 && par2 != 0) {
if (FurnaceRecipes.smelting().getSmeltingResult(var5) != null) {
if (!this.mergeItemStack(var5, 0, 1, false))
return null;
} }
else if (TileEntityFurnace.isItemFuel(var5)) {
if (!this.mergeItemStack(var5, 1, 2, false))
return null;
}
else if (par2 >= 3 && par2 < 30) {
if (!this.mergeItemStack(var5, 30, 39, false))
return null;
}
else if (par2 >= 30 && par2 < 39 && !this.mergeItemStack(var5, 3, 30, false))
return null;
}
else if (!this.mergeItemStack(var5, 3, 39, false))
return null;
if (var5.stackSize == 0) {
var4.putStack((ItemStack) null);
} }
else { else {
var4.onSlotChanged();
/**
* If the stack being shift-clicked into the Aludel's container is a fuel, first try to put it in the fuel slot.
* If it cannot be merged into the fuel slot, try to put it in the input slot.
*/
if (TileEntityFurnace.isItemFuel(slotItemStack)) {
if (!this.mergeItemStack(slotItemStack, TileCalcinator.FUEL_INVENTORY_INDEX, TileCalcinator.OUTPUT_INVENTORY_INDEX, false)) {
return null;
}
}
/**
* Finally, attempt to put stack into the input slot
*/
else if (!this.mergeItemStack(slotItemStack, TileCalcinator.INPUT_INVENTORY_INDEX, TileCalcinator.OUTPUT_INVENTORY_INDEX, false)) {
return null;
}
} }
if (var5.stackSize == var3.stackSize) if (slotItemStack.stackSize == 0) {
return null; slot.putStack((ItemStack) null);
}
var4.onPickupFromSlot(par1EntityPlayer, var5); else {
slot.onSlotChanged();
}
} }
return var3; return itemStack;
} }
} }

View file

@ -25,7 +25,7 @@ public class ContainerGlassBell extends Container {
public ContainerGlassBell(InventoryPlayer inventoryPlayer, TileGlassBell tileGlassBell) { public ContainerGlassBell(InventoryPlayer inventoryPlayer, TileGlassBell tileGlassBell) {
this.addSlotToContainer(new Slot(tileGlassBell, TileAludel.INPUT_INVENTORY_INDEX, 80, 22)); this.addSlotToContainer(new Slot(tileGlassBell, TileGlassBell.DISPLAY_SLOT_INVENTORY_INDEX, 80, 22));
// Add the player's inventory slots to the container // Add the player's inventory slots to the container
for (int inventoryRowIndex = 0; inventoryRowIndex < PLAYER_INVENTORY_ROWS; ++inventoryRowIndex) { for (int inventoryRowIndex = 0; inventoryRowIndex < PLAYER_INVENTORY_ROWS; ++inventoryRowIndex) {

View file

@ -29,9 +29,9 @@ public class TileAludel extends TileEE implements IInventory {
public static final int INVENTORY_SIZE = 4; public static final int INVENTORY_SIZE = 4;
public static final int INPUT_INVENTORY_INDEX = 0; public static final int FUEL_INVENTORY_INDEX = 0;
public static final int DUST_INVENTORY_INDEX = 1; public static final int INPUT_INVENTORY_INDEX = 1;
public static final int FUEL_INVENTORY_INDEX = 2; public static final int DUST_INVENTORY_INDEX = 2;
public static final int OUTPUT_INVENTORY_INDEX = 3; public static final int OUTPUT_INVENTORY_INDEX = 3;
public TileAludel() { public TileAludel() {

View file

@ -27,7 +27,7 @@ public class TileCalcinator extends TileEE implements IInventory {
public static final int FUEL_INVENTORY_INDEX = 0; public static final int FUEL_INVENTORY_INDEX = 0;
public static final int INPUT_INVENTORY_INDEX = 1; public static final int INPUT_INVENTORY_INDEX = 1;
public static final int DUST_INVENTORY_INDEX = 2; public static final int OUTPUT_INVENTORY_INDEX = 2;
public TileCalcinator() { public TileCalcinator() {