Search in sources :

Example 6 with TileEntityCrystalMarker

use of am2.blocks.tileentities.TileEntityCrystalMarker in project ArsMagica2 by Mithion.

the class BlockCrystalMarker method onBlockPlacedBy.

@Override
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack itemStack) {
    TileEntity te = world.getTileEntity(x, y, z);
    if (te != null && te instanceof TileEntityCrystalMarker) {
        ((TileEntityCrystalMarker) te).setFacing(facingHolder);
        Block attachedTo = null;
        double minx = 0;
        double miny = 0;
        double minz = 0;
        double maxx = 1;
        double maxy = 1;
        double maxz = 1;
        switch(facingHolder) {
            case // Bottom, Inventory is above
            0:
                attachedTo = world.getBlock(x, y + 1, z);
                break;
            case // Top, Inventory is below
            1:
                attachedTo = world.getBlock(x, y - 1, z);
                break;
            case // North, Inventory is to the south
            2:
                attachedTo = world.getBlock(x, y, z + 1);
                break;
            case // South, Inventory is to the north
            3:
                attachedTo = world.getBlock(x, y, z - 1);
                break;
            case // West, Inventory is to the east
            4:
                attachedTo = world.getBlock(x + 1, y, z);
                break;
            case // East, Inventory is to the west
            5:
                attachedTo = world.getBlock(x - 1, y, z);
                break;
        }
        if (attachedTo != null) {
            minx = attachedTo.getBlockBoundsMinX();
            miny = attachedTo.getBlockBoundsMinY();
            minz = attachedTo.getBlockBoundsMinZ();
            maxx = attachedTo.getBlockBoundsMaxX();
            maxy = attachedTo.getBlockBoundsMaxY();
            maxz = attachedTo.getBlockBoundsMaxZ();
            ((TileEntityCrystalMarker) te).SetConnectedBoundingBox(minx, miny, minz, maxx, maxy, maxz);
        }
    }
    super.onBlockPlacedBy(world, x, y, z, player, itemStack);
}
Also used : TileEntity(net.minecraft.tileentity.TileEntity) TileEntityCrystalMarker(am2.blocks.tileentities.TileEntityCrystalMarker) Block(net.minecraft.block.Block)

Example 7 with TileEntityCrystalMarker

use of am2.blocks.tileentities.TileEntityCrystalMarker in project ArsMagica2 by Mithion.

the class BlockCrystalMarker method setBlockBoundsBasedOnState.

@Override
public void setBlockBoundsBasedOnState(IBlockAccess par1iBlockAccess, int x, int y, int z) {
    TileEntity te = par1iBlockAccess.getTileEntity(x, y, z);
    TileEntityCrystalMarker cm = (TileEntityCrystalMarker) te;
    int facing = cm.getFacing();
    switch(facing) {
        case // Bottom, Inventory is above
        0:
            this.setBlockBounds(0.35f, (float) ((1 + cm.GetConnectedBoundingBox().minY)) - 0.1f, 0.32f, 0.65f, (float) ((1 + cm.GetConnectedBoundingBox().minY)), 0.68f);
            break;
        case // Top, Inventory is below
        1:
            this.setBlockBounds(0.35f, (float) (-1 * (1 - cm.GetConnectedBoundingBox().maxY)), 0.3f, 0.65f, (float) (-1 * (1 - cm.GetConnectedBoundingBox().maxY)) + 0.1f, 0.7f);
            break;
        case // North, Inventory is to the south
        2:
            this.setBlockBounds(0.35f, 0.32f, (float) (1 + (1 - cm.GetConnectedBoundingBox().maxZ)) - 0.1f, 0.65f, 0.68f, (float) (1 + (1 - cm.GetConnectedBoundingBox().maxZ)));
            break;
        case // South, Inventory is to the north
        3:
            this.setBlockBounds(0.35f, 0.32f, (float) (0 - cm.GetConnectedBoundingBox().minZ), 0.65f, 0.68f, (float) (0 - cm.GetConnectedBoundingBox().minZ) + 0.1f);
            break;
        case // West, Inventory is to the east
        4:
            this.setBlockBounds((float) (1 + cm.GetConnectedBoundingBox().minX) - 0.1f, 0.32f, 0.35f, (float) (1 + cm.GetConnectedBoundingBox().minX), 0.68f, 0.65f);
            break;
        case // East, Inventory is to the west
        5:
            this.setBlockBounds((float) (-1 * (1 - cm.GetConnectedBoundingBox().maxX)), 0.32f, 0.35f, (float) (-1 * (1 - cm.GetConnectedBoundingBox().maxX)) + 0.1f, 0.68f, 0.65f);
            break;
    }
}
Also used : TileEntity(net.minecraft.tileentity.TileEntity) TileEntityCrystalMarker(am2.blocks.tileentities.TileEntityCrystalMarker)

Example 8 with TileEntityCrystalMarker

use of am2.blocks.tileentities.TileEntityCrystalMarker in project ArsMagica2 by Mithion.

the class BlockCrystalMarker method onNeighborBlockChange.

@Override
public void onNeighborBlockChange(World world, int x, int y, int z, Block blockID) {
    if (world.isRemote) {
        return;
    }
    TileEntity te = world.getTileEntity(x, y, z);
    TileEntityCrystalMarker cm = null;
    boolean mustDrop = false;
    if (te != null && te instanceof TileEntityCrystalMarker) {
        cm = (TileEntityCrystalMarker) te;
    } else {
        return;
    }
    switch(cm.getFacing()) {
        case // Bottom, Inventory is above
        0:
            mustDrop = world.isAirBlock(x, y + 1, z);
            break;
        case // Top, Inventory is below
        1:
            mustDrop = world.isAirBlock(x, y - 1, z);
            break;
        case // North, Inventory is to the south
        2:
            mustDrop = world.isAirBlock(x, y, z + 1);
            break;
        case // South, Inventory is to the north
        3:
            mustDrop = world.isAirBlock(x, y, z - 1);
            break;
        case // West, Inventory is to the east
        4:
            mustDrop = world.isAirBlock(x + 1, y, z);
            break;
        case // East, Inventory is to the west
        5:
            mustDrop = world.isAirBlock(x - 1, y, z);
            break;
    }
    if (mustDrop) {
        Block block = world.getBlock(x, y, z);
        ItemStack itemStack = new ItemStack(block, 1, world.getBlockMetadata(x, y, z));
        EntityItem entityItem = new EntityItem(world, x, y, z, itemStack);
        world.spawnEntityInWorld(entityItem);
        world.setBlockToAir(x, y, z);
    }
}
Also used : TileEntity(net.minecraft.tileentity.TileEntity) TileEntityCrystalMarker(am2.blocks.tileentities.TileEntityCrystalMarker) Block(net.minecraft.block.Block) ItemStack(net.minecraft.item.ItemStack) EntityItem(net.minecraft.entity.item.EntityItem)

Example 9 with TileEntityCrystalMarker

use of am2.blocks.tileentities.TileEntityCrystalMarker in project ArsMagica2 by Mithion.

the class FlickerOperatorItemTransport method FindOutput.

/**
 * Will try to find a place to move the item stack
 *
 * @param stack The item stack to move
 * @return Returns true if the item can be moved, returns false otherwise
 */
private boolean FindOutput(World worldObj, TileEntityFlickerHabitat attuner, ItemStack stack, IInventory source) {
    HashMap<Integer, ArrayList<AMVector3>> removeFromOutList = new HashMap<Integer, ArrayList<AMVector3>>();
    boolean itemMoved = false;
    for (int priority = 0; priority <= TileEntityFlickerHabitat.PRIORITY_FINAL; ++priority) {
        if (attuner.getOutListPosition(priority) >= attuner.getOutListSize(priority)) {
            // if the out list position has gone outside the list size reset it to 0
            attuner.setOutListPosition(priority, 0);
        }
        int start = attuner.getOutListPosition(priority);
        int pos = start;
        boolean fullLoop = false;
        while (!fullLoop) {
            // get the crystal marker tile entity for the specified position
            AMVector3 vector = attuner.getOutListAt(priority, pos);
            TileEntity te = null;
            TileEntityCrystalMarker crystalMarkerTE = GetCrystalMarkerTileEntity(worldObj, (int) vector.x, (int) vector.y, (int) vector.z);
            if (crystalMarkerTE == null) {
                // crystal marker no longer exists, remove it from the list
                if (!removeFromOutList.containsKey(priority))
                    removeFromOutList.put(priority, new ArrayList<AMVector3>());
                removeFromOutList.get(priority).add(vector);
                break;
            }
            te = GetAttachedCrystalMarkerTileEntity(worldObj, crystalMarkerTE, vector);
            int markerType = worldObj.getBlockMetadata((int) vector.x, (int) vector.y, (int) vector.z);
            if (te != null && te instanceof IInventory) {
                IInventory inventory = (IInventory) te;
                itemMoved = outputItem(markerType, new IInventory[] { inventory }, stack, crystalMarkerTE, new IInventory[] { source });
                if (itemMoved) {
                    attuner.setOutListPosition(priority, pos + 1);
                }
            }
            if (!itemMoved && te instanceof TileEntityChest) {
                // This handles the special case of double chests
                TileEntityChest adjacent = InventoryUtilities.getAdjacentChest((TileEntityChest) te);
                if (adjacent != null) {
                    IInventory inventory = adjacent;
                    itemMoved = outputItem(markerType, new IInventory[] { inventory, (IInventory) te }, stack, crystalMarkerTE, new IInventory[] { source });
                    if (itemMoved) {
                        attuner.setOutListPosition(priority, pos + 1);
                    }
                }
            }
            if (itemMoved)
                break;
            pos++;
            pos %= attuner.getOutListSize(priority);
            if (pos == start)
                fullLoop = true;
        }
        for (int i : removeFromOutList.keySet()) {
            for (AMVector3 vector : removeFromOutList.get(i)) {
                attuner.removeOutListAt(i, vector);
            }
        }
        if (!itemMoved) {
            attuner.setOutListPosition(priority, 0);
        } else {
            break;
        }
    }
    return itemMoved;
}
Also used : TileEntity(net.minecraft.tileentity.TileEntity) IInventory(net.minecraft.inventory.IInventory) AMVector3(am2.api.math.AMVector3) TileEntityChest(net.minecraft.tileentity.TileEntityChest) TileEntityCrystalMarker(am2.blocks.tileentities.TileEntityCrystalMarker) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList)

Example 10 with TileEntityCrystalMarker

use of am2.blocks.tileentities.TileEntityCrystalMarker in project ArsMagica2 by Mithion.

the class ServerGuiManager method getServerGuiElement.

@Override
public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
    TileEntity te = world.getTileEntity(x, y, z);
    if (te == null && ID != ArsMagicaGuiIdList.GUI_SPELL_BOOK && ID != ArsMagicaGuiIdList.GUI_KEYSTONE && ID != ArsMagicaGuiIdList.GUI_ESSENCE_BAG && ID != ArsMagicaGuiIdList.GUI_RUNE_BAG && ID != ArsMagicaGuiIdList.GUI_RIFT && ID != ArsMagicaGuiIdList.GUI_SPELL_CUSTOMIZATION) {
        return null;
    }
    switch(ID) {
        case ArsMagicaGuiIdList.GUI_ESSENCE_REFINER:
            if (!(te instanceof TileEntityEssenceRefiner)) {
                return null;
            }
            return new ContainerEssenceRefiner(player.inventory, (TileEntityEssenceRefiner) te);
        case ArsMagicaGuiIdList.GUI_SPELL_BOOK:
            ItemStack bookStack = player.getCurrentEquippedItem();
            if (bookStack.getItem() == null || !(bookStack.getItem() instanceof ItemSpellBook)) {
                return null;
            }
            ItemSpellBook item = (ItemSpellBook) bookStack.getItem();
            return new ContainerSpellBook(player.inventory, player.getCurrentEquippedItem(), item.ConvertToInventory(bookStack));
        case ArsMagicaGuiIdList.GUI_CALEFACTOR:
            if (!(te instanceof TileEntityCalefactor)) {
                return null;
            }
            return new ContainerCalefactor(player, (TileEntityCalefactor) te);
        case ArsMagicaGuiIdList.GUI_KEYSTONE_LOCKABLE:
            if (!(te instanceof IKeystoneLockable)) {
                return null;
            }
            return new ContainerKeystoneLockable(player.inventory, (IKeystoneLockable) te);
        case ArsMagicaGuiIdList.GUI_ASTRAL_BARRIER:
            if (!(te instanceof TileEntityAstralBarrier)) {
                return null;
            }
            return new ContainerAstralBarrier(player.inventory, (TileEntityAstralBarrier) te);
        case ArsMagicaGuiIdList.GUI_SEER_STONE:
            if (!(te instanceof TileEntitySeerStone)) {
                return null;
            }
            return new ContainerSeerStone(player.inventory, (TileEntitySeerStone) te);
        case ArsMagicaGuiIdList.GUI_KEYSTONE_CHEST:
            if (!(te instanceof TileEntityKeystoneChest)) {
                return null;
            }
            return new ContainerKeystoneChest(player.inventory, (TileEntityKeystoneChest) te);
        case ArsMagicaGuiIdList.GUI_KEYSTONE:
            ItemStack keystoneStack = player.getCurrentEquippedItem();
            if (keystoneStack.getItem() == null || !(keystoneStack.getItem() instanceof ItemKeystone)) {
                return null;
            }
            ItemKeystone keystone = (ItemKeystone) keystoneStack.getItem();
            int runeBagSlot = InventoryUtilities.getInventorySlotIndexFor(player.inventory, ItemsCommonProxy.runeBag);
            ItemStack runeBag = null;
            if (runeBagSlot > -1)
                runeBag = player.inventory.getStackInSlot(runeBagSlot);
            return new ContainerKeystone(player.inventory, player.getCurrentEquippedItem(), runeBag, keystone.ConvertToInventory(keystoneStack), runeBag == null ? null : ItemsCommonProxy.runeBag.ConvertToInventory(runeBag), runeBagSlot);
        case ArsMagicaGuiIdList.GUI_ESSENCE_BAG:
            ItemStack bagStack = player.getCurrentEquippedItem();
            if (bagStack.getItem() == null || !(bagStack.getItem() instanceof ItemEssenceBag)) {
                return null;
            }
            ItemEssenceBag bag = (ItemEssenceBag) bagStack.getItem();
            return new ContainerEssenceBag(player.inventory, player.getCurrentEquippedItem(), bag.ConvertToInventory(bagStack));
        case ArsMagicaGuiIdList.GUI_RUNE_BAG:
            bagStack = player.getCurrentEquippedItem();
            if (bagStack.getItem() == null || !(bagStack.getItem() instanceof ItemRuneBag)) {
                return null;
            }
            ItemRuneBag runebag = (ItemRuneBag) bagStack.getItem();
            return new ContainerRuneBag(player.inventory, player.getCurrentEquippedItem(), runebag.ConvertToInventory(bagStack));
        case ArsMagicaGuiIdList.GUI_ARCANE_RECONSTRUCTOR:
            if (!(te instanceof TileEntityArcaneReconstructor)) {
                return null;
            }
            return new ContainerArcaneReconstructor(player.inventory, (TileEntityArcaneReconstructor) te);
        case ArsMagicaGuiIdList.GUI_INSCRIPTION_TABLE:
            if (!(te instanceof TileEntityInscriptionTable)) {
                return null;
            }
            return new ContainerInscriptionTable((TileEntityInscriptionTable) te, player.inventory);
        case ArsMagicaGuiIdList.GUI_SUMMONER:
            if (!(te instanceof TileEntitySummoner)) {
                return null;
            }
            return new ContainerSummoner(player.inventory, (TileEntitySummoner) te);
        case ArsMagicaGuiIdList.GUI_MAGICIANS_WORKBENCH:
            if (!(te instanceof TileEntityMagiciansWorkbench)) {
                return null;
            }
            return new ContainerMagiciansWorkbench(player.inventory, (TileEntityMagiciansWorkbench) te);
        case ArsMagicaGuiIdList.GUI_RIFT:
            return new ContainerRiftStorage(player.inventory, RiftStorage.For(player));
        case ArsMagicaGuiIdList.GUI_SPELL_CUSTOMIZATION:
            return new ContainerSpellCustomization(player);
        case ArsMagicaGuiIdList.GUI_CRYSTAL_MARKER:
            if (!(te instanceof TileEntityCrystalMarker)) {
                return null;
            }
            return new ContainerCrystalMarker(player, (TileEntityCrystalMarker) te);
        case ArsMagicaGuiIdList.GUI_OBELISK:
            if (!(te instanceof TileEntityObelisk)) {
                return null;
            }
            return new ContainerObelisk((TileEntityObelisk) te, player);
        case ArsMagicaGuiIdList.GUI_FLICKER_HABITAT:
            if (!(te instanceof TileEntityFlickerHabitat)) {
                return null;
            }
            return new ContainerFlickerHabitat(player, (TileEntityFlickerHabitat) te);
        case ArsMagicaGuiIdList.GUI_ARMOR_INFUSION:
            if (!(te instanceof TileEntityArmorImbuer)) {
                return null;
            }
            return new ContainerArmorInfuser(player, (TileEntityArmorImbuer) te);
        case ArsMagicaGuiIdList.GUI_ARCANE_DECONSTRUCTOR:
            if (!(te instanceof TileEntityArcaneDeconstructor)) {
                return null;
            }
            return new ContainerArcaneDeconstructor(player.inventory, (TileEntityArcaneDeconstructor) te);
        case ArsMagicaGuiIdList.GUI_INERT_SPAWNER:
            if (!(te instanceof TileEntityInertSpawner)) {
                return null;
            }
            return new ContainerInertSpawner(player, (TileEntityInertSpawner) te);
        case ArsMagicaGuiIdList.GUI_SPELL_SEALED_DOOR:
            if (!(te instanceof TileEntitySpellSealedDoor)) {
                return null;
            }
            return new ContainerSpellSealedDoor(player.inventory, (TileEntitySpellSealedDoor) te);
    }
    return null;
}
Also used : TileEntity(net.minecraft.tileentity.TileEntity) IKeystoneLockable(am2.api.blocks.IKeystoneLockable) ItemStack(net.minecraft.item.ItemStack)

Aggregations

TileEntityCrystalMarker (am2.blocks.tileentities.TileEntityCrystalMarker)8 TileEntity (net.minecraft.tileentity.TileEntity)8 AMVector3 (am2.api.math.AMVector3)5 ItemStack (net.minecraft.item.ItemStack)5 Block (net.minecraft.block.Block)3 IKeystoneLockable (am2.api.blocks.IKeystoneLockable)2 TileEntityFlickerHabitat (am2.blocks.tileentities.TileEntityFlickerHabitat)2 ArrayList (java.util.ArrayList)2 IInventory (net.minecraft.inventory.IInventory)2 TileEntityChest (net.minecraft.tileentity.TileEntityChest)2 IPowerNode (am2.api.power.IPowerNode)1 TileEntityParticleEmitter (am2.blocks.tileentities.TileEntityParticleEmitter)1 GetFirstStackStartingFromSlotResult (am2.utility.GetFirstStackStartingFromSlotResult)1 HashMap (java.util.HashMap)1 EntityItem (net.minecraft.entity.item.EntityItem)1 ItemBlock (net.minecraft.item.ItemBlock)1 NBTTagCompound (net.minecraft.nbt.NBTTagCompound)1 NBTTagString (net.minecraft.nbt.NBTTagString)1 ChatComponentText (net.minecraft.util.ChatComponentText)1