Package tconstruct.mechworks.logic

Source Code of tconstruct.mechworks.logic.LandmineExplodeLogic

package tconstruct.mechworks.logic;

import java.util.*;
import mantle.world.WorldHelper;
import net.minecraft.entity.Entity;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import tconstruct.mechworks.landmine.behavior.Behavior;

/**
* This logic is designed only for blocks having TileEntityLandmine as their
* tileEntity(otherwise ClassCastException will be awarded)
*
* @author fuj1n
*
*/
public class LandmineExplodeLogic
{

    private final World worldObj;
    private final Entity triggerer;
    private final TileEntityLandmine tileEntity;
    private final int x, y, z;

    public LandmineExplodeLogic(World par1World, int par2, int par3, int par4, Entity entity)
    {
        worldObj = par1World;
        this.tileEntity = (TileEntityLandmine) par1World.getTileEntity(par2, par3, par4);
        this.x = par2;
        this.y = par3;
        this.z = par4;
        this.triggerer = entity;
    }

    public void explode ()
    {
        if (triggerer == null)
        {
            return;
        }

        boolean preventExplode = false;
        boolean isOffensive = true;
        boolean cancelDefault = false;

        ArrayList<ItemStack> stacks = new ArrayList<ItemStack>();
        boolean hasExploded = false;

        if (tileEntity == null)
        {
            return;
        }

        tileEntity.isExploding = true;

        for (int i = 0; i < tileEntity.getSizeTriggerInventory(); i++)
        {
            ItemStack currentStack = tileEntity.getStackInSlot(i);
            Behavior b = Behavior.getBehaviorFromStack(currentStack);
            if (b != null)
            {

                if (b.doesBehaviorPreventRemovalOfBlock(currentStack))
                {
                    preventExplode = true;
                }

                if (!b.isBehaviorExchangableWithOffensive(currentStack))
                {
                    isOffensive = false;
                }

                if (b.overridesDefault())
                {
                    cancelDefault = true;
                }

                if (!stacks.isEmpty() && Behavior.arrayContainsEqualStack(stacks, currentStack) && b.effectStacks())
                {
                    stacks.get(Behavior.arrayIndexOfStack(stacks, currentStack)).stackSize += currentStack.stackSize;
                }
                else
                {
                    stacks.add(currentStack.copy());
                }
            }
        }

        LandmineSpecialStackLogic specialStacks = new LandmineSpecialStackLogic(worldObj, x, y, z, triggerer, isOffensive, stacks);
        specialStacks.handleSpecialStacks();

        Iterator<ItemStack> i1 = stacks.iterator();
        while (i1.hasNext())
        {
            ItemStack currentStack = i1.next();
            Behavior b = Behavior.getBehaviorFromStack(currentStack);
            if (b != null)
            {
                if (isOffensive || !b.isOffensive(currentStack))
                {
                    b.executeLogic(worldObj, x, y, z, currentStack, triggerer, !preventExplode);
                    if (b.shouldItemBeRemoved(currentStack, !preventExplode))
                    {
                        if (b.effectStacks())
                        {
                            for (int i = 0; i < tileEntity.getSizeTriggerInventory(); i++)
                            {
                                if (tileEntity.getStackInSlot(i) != null)
                                {
                                    if (tileEntity.getStackInSlot(i).isItemEqual(currentStack))
                                    {
                                        tileEntity.setInventorySlotContents(i, null);
                                    }
                                }
                            }
                        }
                        else
                        {
                            boolean hasRemoved = false;

                            for (int i = 0; i < tileEntity.getSizeTriggerInventory() && !hasRemoved; i++)
                            {
                                if (tileEntity.getStackInSlot(i) != null)
                                {
                                    if (tileEntity.getStackInSlot(i).isItemEqual(currentStack))
                                    {
                                        tileEntity.setInventorySlotContents(i, null);
                                        hasRemoved = true;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

        Behavior defBeh = Behavior.getDefaulBehavior();
        if (defBeh != null && isOffensive && !cancelDefault)
        {
            defBeh.executeLogic(worldObj, x, y, z, null, triggerer, !preventExplode);
        }

        if (hasExploded || defBeh != null && !preventExplode)
        {
            worldObj.removeTileEntity(x, y, z);
            WorldHelper.setBlockToAir(worldObj, x, y, z);
        }
        else
        {
            tileEntity.isExploding = false;
        }
    }
}
TOP

Related Classes of tconstruct.mechworks.logic.LandmineExplodeLogic

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.