/******************************************************************************* * AbyssalCraft * Copyright (c) 2012 - 2017 Shinoow. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser Public License v3 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/lgpl-3.0.txt * * Contributors: * Shinoow - implementation ******************************************************************************/ /** * AbyssalCraft * Copyright 2012-2015 Shinoow * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.shinoow.abyssalcraft.common.inventory; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.IContainerListener; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import com.shinoow.abyssalcraft.api.recipe.CrystallizerRecipes; import com.shinoow.abyssalcraft.common.blocks.tile.TileEntityCrystallizer; public class ContainerCrystallizer extends Container { private TileEntityCrystallizer tileCrystallizer; private int lastCookTime; private int lastCookTime2; private int lastBurnTime; private int lastItemBurnTime; public ContainerCrystallizer(InventoryPlayer par1InventoryPlayer, TileEntityCrystallizer par2TileEntityCrystalizer) { tileCrystallizer = par2TileEntityCrystalizer; addSlotToContainer(new Slot(par2TileEntityCrystalizer, 0, 56, 17)); addSlotToContainer(new Slot(par2TileEntityCrystalizer, 1, 56, 53)); addSlotToContainer(new SlotCrystallizer(par1InventoryPlayer.player, par2TileEntityCrystalizer, 2, 116, 35)); addSlotToContainer(new SlotCrystallizer(par1InventoryPlayer.player, par2TileEntityCrystalizer, 3, 132, 35)); int i; for (i = 0; i < 3; ++i) for (int j = 0; j < 9; ++j) addSlotToContainer(new Slot(par1InventoryPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); for (i = 0; i < 9; ++i) addSlotToContainer(new Slot(par1InventoryPlayer, i, 8 + i * 18, 142)); } @Override public void addListener(IContainerListener listener) { super.addListener(listener); listener.sendProgressBarUpdate(this, 0, tileCrystallizer.crystallizerFormTime); listener.sendProgressBarUpdate(this, 1, tileCrystallizer.crystallizerShapeTime); listener.sendProgressBarUpdate(this, 2, tileCrystallizer.currentItemShapingTime); listener.sendProgressBarUpdate(this, 3, tileCrystallizer.crystallizerFormTime); } @Override public void detectAndSendChanges() { super.detectAndSendChanges(); for (int i = 0; i < listeners.size(); ++i) { IContainerListener icrafting = listeners.get(i); if (lastCookTime != tileCrystallizer.crystallizerFormTime) icrafting.sendProgressBarUpdate(this, 0, tileCrystallizer.crystallizerFormTime); if (lastBurnTime != tileCrystallizer.crystallizerShapeTime) icrafting.sendProgressBarUpdate(this, 1, tileCrystallizer.crystallizerShapeTime); if (lastItemBurnTime != tileCrystallizer.currentItemShapingTime) icrafting.sendProgressBarUpdate(this, 2, tileCrystallizer.currentItemShapingTime); if (lastCookTime2 != tileCrystallizer.crystallizerFormTime) icrafting.sendProgressBarUpdate(this, 3, tileCrystallizer.crystallizerFormTime); } lastCookTime = tileCrystallizer.crystallizerFormTime; lastCookTime2 = tileCrystallizer.crystallizerFormTime; lastBurnTime = tileCrystallizer.crystallizerShapeTime; lastItemBurnTime = tileCrystallizer.currentItemShapingTime; } @Override @SideOnly(Side.CLIENT) public void updateProgressBar(int par1, int par2) { if (par1 == 0) tileCrystallizer.crystallizerFormTime = par2; if (par1 == 1) tileCrystallizer.crystallizerShapeTime = par2; if (par1 == 2) tileCrystallizer.currentItemShapingTime = par2; if (par1 == 3) tileCrystallizer.crystallizerFormTime = par2; } @Override public boolean canInteractWith(EntityPlayer par1EntityPlayer) { return tileCrystallizer.isUsableByPlayer(par1EntityPlayer); } @Override public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int par2) { ItemStack itemstack = ItemStack.EMPTY; Slot slot = inventorySlots.get(par2); if (slot != null && slot.getHasStack()) { ItemStack itemstack1 = slot.getStack(); itemstack = itemstack1.copy(); if (par2 == 2) { if (!mergeItemStack(itemstack1, 3, 39, true)) return ItemStack.EMPTY; slot.onSlotChange(itemstack1, itemstack); } else if (par2 != 1 && par2 != 0) { if (CrystallizerRecipes.instance().getCrystallizationResult(itemstack1) != null) { if (!mergeItemStack(itemstack1, 0, 1, false)) return ItemStack.EMPTY; } else if (TileEntityCrystallizer.isItemFuel(itemstack1)) { if (!mergeItemStack(itemstack1, 1, 2, false)) return ItemStack.EMPTY; } else if (par2 >= 3 && par2 < 30) { if (!mergeItemStack(itemstack1, 30, 39, false)) return ItemStack.EMPTY; } else if (par2 >= 30 && par2 < 39 && !mergeItemStack(itemstack1, 3, 30, false)) return ItemStack.EMPTY; } else if (!mergeItemStack(itemstack1, 3, 39, false)) return ItemStack.EMPTY; if (itemstack1.isEmpty()) slot.putStack(ItemStack.EMPTY); else slot.onSlotChanged(); if (itemstack1.getCount() == itemstack.getCount()) return ItemStack.EMPTY; slot.onTake(par1EntityPlayer, itemstack1); } return itemstack; } }