Search in sources :

Example 1 with TileEntityUrnOfSorrow

use of nex.tileentity.TileEntityUrnOfSorrow in project NetherEx by LogicTechCorp.

the class BlockUrnOfSorrow method onBlockActivated.

@Override
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
    TileEntityUrnOfSorrow altar = (TileEntityUrnOfSorrow) world.getTileEntity(pos);
    if (altar == null) {
        return false;
    }
    ItemStackHandler inventory = altar.getInventory();
    ItemStack inventoryStack = inventory.getStackInSlot(0);
    ItemStack heldStack = player.getHeldItemMainhand();
    if (!player.isSneaking()) {
        if (heldStack.getItem() == Items.POTIONITEM && state.getValue(TYPE) == EnumType.EMPTY) {
            for (PotionEffect effect : PotionUtils.getEffectsFromStack(heldStack)) {
                if (effect.getPotion() == NetherExEffects.LOST) {
                    player.getHeldItemMainhand().shrink(1);
                    world.setBlockState(pos, state.withProperty(TYPE, EnumType.FULL));
                }
            }
        } else {
            if (inventoryStack.isEmpty() && !player.getHeldItemMainhand().isEmpty()) {
                inventory.setStackInSlot(0, player.getHeldItemMainhand().splitStack(1));
            }
        }
    } else {
        if (!inventoryStack.isEmpty() && altar.getSummoningTime() == 0) {
            if (!world.isRemote) {
                altar.spawnItemStack(world, pos.up(), inventory.getStackInSlot(0));
            }
            inventory.setStackInSlot(0, ItemStack.EMPTY);
        }
    }
    return super.onBlockActivated(world, pos, state, player, hand, facing, hitX, hitY, hitZ);
}
Also used : ItemStackHandler(net.minecraftforge.items.ItemStackHandler) TileEntityUrnOfSorrow(nex.tileentity.TileEntityUrnOfSorrow) PotionEffect(net.minecraft.potion.PotionEffect) ItemStack(net.minecraft.item.ItemStack)

Example 2 with TileEntityUrnOfSorrow

use of nex.tileentity.TileEntityUrnOfSorrow in project NetherEx by LogicTechCorp.

the class WorldGenUtil method generateStructure.

public static void generateStructure(World world, BlockPos pos, Random rand, Template template, PlacementSettings placementSettings, ResourceLocation[] lootTables, ResourceLocation[] spawnerMobs) {
    try {
        List<Template.BlockInfo> blocks = (List<Template.BlockInfo>) FIELD_BLOCKS.get(template);
        List<Template.EntityInfo> entities = (List<Template.EntityInfo>) FIELD_ENTITIES.get(template);
        if ((!blocks.isEmpty() || !placementSettings.getIgnoreEntities() && !entities.isEmpty()) && template.getSize().getX() >= 1 && template.getSize().getY() >= 1 && template.getSize().getZ() >= 1) {
            BlockRotationProcessor processor = new BlockRotationProcessor(pos, placementSettings);
            Block block = placementSettings.getReplacedBlock();
            StructureBoundingBox boundingBox = placementSettings.getBoundingBox();
            for (Template.BlockInfo blockInfo : blocks) {
                BlockPos blockPos = Template.transformedBlockPos(placementSettings, blockInfo.pos).add(pos);
                Template.BlockInfo blockInfo1 = processor != null ? processor.processBlock(world, blockPos, blockInfo) : blockInfo;
                if (blockInfo1 != null) {
                    Block block1 = blockInfo1.blockState.getBlock();
                    if ((block == null || block != block1) && (!placementSettings.getIgnoreStructureBlock() || block1 != Blocks.STRUCTURE_BLOCK) && (boundingBox == null || boundingBox.isVecInside(blockPos))) {
                        IBlockState state = blockInfo1.blockState.withMirror(placementSettings.getMirror()).withRotation(placementSettings.getRotation());
                        if (blockInfo1.tileentityData != null) {
                            TileEntity tileEntity = world.getTileEntity(blockPos);
                            if (tileEntity != null) {
                                if (tileEntity instanceof IInventory) {
                                    ((IInventory) tileEntity).clear();
                                }
                                world.setBlockState(blockPos, Blocks.BARRIER.getDefaultState(), 4);
                            }
                        }
                        if (world.setBlockState(blockPos, state, 3) && blockInfo1.tileentityData != null) {
                            TileEntity tileEntity = world.getTileEntity(blockPos);
                            if (tileEntity != null) {
                                blockInfo1.tileentityData.setInteger("x", blockPos.getX());
                                blockInfo1.tileentityData.setInteger("y", blockPos.getY());
                                blockInfo1.tileentityData.setInteger("z", blockPos.getZ());
                                tileEntity.readFromNBT(blockInfo1.tileentityData);
                                tileEntity.mirror(placementSettings.getMirror());
                                tileEntity.rotate(placementSettings.getRotation());
                                if (state.getBlock() instanceof BlockChest) {
                                    ((TileEntityChest) tileEntity).setLootTable(lootTables[rand.nextInt(lootTables.length)], rand.nextLong());
                                } else if (state.getBlock() instanceof BlockMobSpawner) {
                                    ((TileEntityMobSpawner) tileEntity).getSpawnerBaseLogic().setEntityId(spawnerMobs[rand.nextInt(spawnerMobs.length)]);
                                } else if (state.getBlock() instanceof BlockUrnOfSorrow) {
                                    ((TileEntityUrnOfSorrow) tileEntity).setCanBreak(false);
                                }
                            }
                        }
                    }
                }
            }
            for (Template.BlockInfo blockInfo2 : blocks) {
                if (block == null || block != blockInfo2.blockState.getBlock()) {
                    BlockPos blockPos1 = Template.transformedBlockPos(placementSettings, blockInfo2.pos).add(pos);
                    if (boundingBox == null || boundingBox.isVecInside(blockPos1)) {
                        world.notifyNeighborsRespectDebug(blockPos1, blockInfo2.blockState.getBlock(), false);
                        if (blockInfo2.tileentityData != null) {
                            TileEntity tileEntity = world.getTileEntity(blockPos1);
                            if (tileEntity != null) {
                                tileEntity.markDirty();
                            }
                        }
                    }
                }
            }
            if (!placementSettings.getIgnoreEntities()) {
                addEntitiesToWorld(world, pos, placementSettings, entities, boundingBox);
            }
        }
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }
}
Also used : IInventory(net.minecraft.inventory.IInventory) TileEntityChest(net.minecraft.tileentity.TileEntityChest) StructureBoundingBox(net.minecraft.world.gen.structure.StructureBoundingBox) IBlockState(net.minecraft.block.state.IBlockState) BlockChest(net.minecraft.block.BlockChest) BlockUrnOfSorrow(nex.block.BlockUrnOfSorrow) BlockRotationProcessor(net.minecraft.world.gen.structure.template.BlockRotationProcessor) Template(net.minecraft.world.gen.structure.template.Template) TileEntity(net.minecraft.tileentity.TileEntity) BlockMobSpawner(net.minecraft.block.BlockMobSpawner) TileEntityUrnOfSorrow(nex.tileentity.TileEntityUrnOfSorrow) Block(net.minecraft.block.Block) NBTTagList(net.minecraft.nbt.NBTTagList) EntityList(net.minecraft.entity.EntityList) List(java.util.List) BlockPos(net.minecraft.util.math.BlockPos) TileEntityMobSpawner(net.minecraft.tileentity.TileEntityMobSpawner)

Aggregations

TileEntityUrnOfSorrow (nex.tileentity.TileEntityUrnOfSorrow)2 List (java.util.List)1 Block (net.minecraft.block.Block)1 BlockChest (net.minecraft.block.BlockChest)1 BlockMobSpawner (net.minecraft.block.BlockMobSpawner)1 IBlockState (net.minecraft.block.state.IBlockState)1 EntityList (net.minecraft.entity.EntityList)1 IInventory (net.minecraft.inventory.IInventory)1 ItemStack (net.minecraft.item.ItemStack)1 NBTTagList (net.minecraft.nbt.NBTTagList)1 PotionEffect (net.minecraft.potion.PotionEffect)1 TileEntity (net.minecraft.tileentity.TileEntity)1 TileEntityChest (net.minecraft.tileentity.TileEntityChest)1 TileEntityMobSpawner (net.minecraft.tileentity.TileEntityMobSpawner)1 BlockPos (net.minecraft.util.math.BlockPos)1 StructureBoundingBox (net.minecraft.world.gen.structure.StructureBoundingBox)1 BlockRotationProcessor (net.minecraft.world.gen.structure.template.BlockRotationProcessor)1 Template (net.minecraft.world.gen.structure.template.Template)1 ItemStackHandler (net.minecraftforge.items.ItemStackHandler)1 BlockUrnOfSorrow (nex.block.BlockUrnOfSorrow)1