package WayofTime.alchemicalWizardry.common.rituals; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import WayofTime.alchemicalWizardry.api.Int3; import WayofTime.alchemicalWizardry.api.RoutingFocusParadigm; import WayofTime.alchemicalWizardry.api.RoutingFocusPosAndFacing; import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; import WayofTime.alchemicalWizardry.common.items.routing.InputRoutingFocus; import WayofTime.alchemicalWizardry.common.items.routing.OutputRoutingFocus; import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; public class RitualEffectItemRouting extends RitualEffect { Random rand = new Random(); @Override public void performEffect(IMasterRitualStone ritualStone) { String owner = ritualStone.getOwner(); int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); World world = ritualStone.getWorld(); int x = ritualStone.getXCoord(); int y = ritualStone.getYCoord(); int z = ritualStone.getZCoord(); if (world.getWorldTime() % 20 != 0) { return; } int xBufOffset = 0; int yBufOffset = 1; int zBufOffset = 0; // TileEntity bufferTile = world.getTileEntity(x + xBufOffset, y + yBufOffset, z + zBufOffset); // // if(!(bufferTile instanceof IInventory)) // { // return; // } Map tileMap = new HashMap(); // IInventory bufferInventory = (IInventory)bufferTile; List outputList = new ArrayList(); for(int i=0; i<4; i++) //Check output foci chests, return if none available { Int3 outputFocusChest = this.getOutputBufferChestLocation(i); TileEntity outputFocusInv = world.getTileEntity(x + outputFocusChest.xCoord, y + outputFocusChest.yCoord, z + outputFocusChest.zCoord); if(outputFocusInv instanceof IInventory) { outputList.add((IInventory)outputFocusInv); } } if(outputList.isEmpty()) { return; } for(int i=0; i<4; i++) { Int3 inputFocusChest = this.getInputBufferChestLocation(i); TileEntity inputFocusInv = world.getTileEntity(x + inputFocusChest.xCoord, y + inputFocusChest.yCoord, z + inputFocusChest.zCoord); if(inputFocusInv instanceof IInventory) { for(int ji=0; ji<((IInventory) inputFocusInv).getSizeInventory(); ji++) //Iterate through foci inventory { ItemStack inputFocusStack = ((IInventory) inputFocusInv).getStackInSlot(ji); if(inputFocusStack != null && inputFocusStack.getItem() instanceof InputRoutingFocus) { InputRoutingFocus inputFocus = (InputRoutingFocus)inputFocusStack.getItem(); TileEntity inputChest = world.getTileEntity(inputFocus.xCoord(inputFocusStack), inputFocus.yCoord(inputFocusStack), inputFocus.zCoord(inputFocusStack)); if(inputChest instanceof IInventory) { IInventory inputChestInventory = (IInventory)inputChest; ForgeDirection syphonDirection = inputFocus.getSetDirection(inputFocusStack); boolean[] canSyphonList = new boolean[inputChestInventory.getSizeInventory()]; if(inputChest instanceof ISidedInventory) { int[] validSlots = ((ISidedInventory) inputChest).getAccessibleSlotsFromSide(syphonDirection.ordinal()); for(int in : validSlots) { canSyphonList[in] = true; } }else { for(int ni=0; ni getRitualComponentList() { ArrayList omegaRitual = new ArrayList(); this.addCornerRunes(omegaRitual, 1, 0, RitualComponent.BLANK); this.addOffsetRunes(omegaRitual, 2, 1, 0, RitualComponent.FIRE); this.addParallelRunes(omegaRitual, 4, 0, RitualComponent.WATER); this.addParallelRunes(omegaRitual, 5, 0, RitualComponent.EARTH); this.addCornerRunes(omegaRitual, 4, 0, RitualComponent.WATER); return omegaRitual; } }