Search in sources :

Example 1 with IPartSlot

use of mcmultipart.api.slot.IPartSlot in project LogisticsPipes by RS485.

the class LPMicroblockBlock method removedByPlayer.

@Override
@ModDependentMethod(modId = LPConstants.mcmpModID)
public boolean removedByPlayer(@Nonnull IBlockState state, World world, @Nonnull BlockPos pos, @Nonnull EntityPlayer player, boolean willHarvest) {
    Pair<Vec3d, Vec3d> vectors = RayTraceHelper.getRayTraceVectors(player);
    RayTraceResult hit = collisionRayTrace(state, world, pos, vectors.getLeft(), vectors.getRight());
    Optional<TileMultipartContainer> tile = getTile(world, pos);
    if (hit != null && tile.isPresent() && hit.subHit >= 0) {
        if (!world.isRemote) {
            IPartSlot slot = MCMultiPart.slotRegistry.getValue(hit.subHit);
            boolean canRemove = tile.get().get(slot).map(i -> {
                if (i.getPart().canPlayerDestroy(i, player)) {
                    i.getPart().onPartHarvested(i, player);
                    if (player == null || !player.capabilities.isCreativeMode) {
                        i.getPart().getDrops(i.getPartWorld(), pos, i, 0).forEach(s -> spawnAsEntity(world, pos, s));
                    }
                    return true;
                } else {
                    return false;
                }
            }).orElse(true);
            if (canRemove)
                tile.get().removePart(slot);
        }
    }
    if (hit != null && hit.subHit == -1) {
        return super.removedByPlayer(state, world, pos, player, willHarvest);
    }
    return false;
}
Also used : Explosion(net.minecraft.world.Explosion) AxisAlignedBB(net.minecraft.util.math.AxisAlignedBB) EnumHand(net.minecraft.util.EnumHand) Random(java.util.Random) IPartInfo(mcmultipart.api.container.IPartInfo) ModDependentMethod(logisticspipes.asm.ModDependentMethod) ItemStack(net.minecraft.item.ItemStack) RayTraceResult(net.minecraft.util.math.RayTraceResult) IPartSlot(mcmultipart.api.slot.IPartSlot) ParticleDigging(net.minecraft.client.particle.ParticleDigging) Block(net.minecraft.block.Block) Vec3d(net.minecraft.util.math.Vec3d) Pair(org.apache.commons.lang3.tuple.Pair) ModDependentInterface(logisticspipes.asm.ModDependentInterface) EntityLiving(net.minecraft.entity.EntityLiving) Side(net.minecraftforge.fml.relauncher.Side) IMCMPBlockAccess(network.rs485.logisticspipes.proxy.mcmp.subproxy.IMCMPBlockAccess) SideOnly(net.minecraftforge.fml.relauncher.SideOnly) LPConstants(logisticspipes.LPConstants) Nonnull(javax.annotation.Nonnull) IBlockAccess(net.minecraft.world.IBlockAccess) Entity(net.minecraft.entity.Entity) BlockContainer(net.minecraft.block.BlockContainer) BlockFaceShape(net.minecraft.block.state.BlockFaceShape) World(net.minecraft.world.World) MCMultiPart(mcmultipart.MCMultiPart) EnumFacing(net.minecraft.util.EnumFacing) BlockPos(net.minecraft.util.math.BlockPos) IMultipartContainerBlock(mcmultipart.api.container.IMultipartContainerBlock) IPlantable(net.minecraftforge.common.IPlantable) IBlockState(net.minecraft.block.state.IBlockState) SimpleServiceLocator(logisticspipes.proxy.SimpleServiceLocator) ParticleManager(net.minecraft.client.particle.ParticleManager) Material(net.minecraft.block.material.Material) EntityLivingBase(net.minecraft.entity.EntityLivingBase) TileMultipartContainer(mcmultipart.block.TileMultipartContainer) EntityPlayer(net.minecraft.entity.player.EntityPlayer) BlockMultipartContainer.getTile(mcmultipart.block.BlockMultipartContainer.getTile) Optional(java.util.Optional) EnumBlockRenderType(net.minecraft.util.EnumBlockRenderType) RayTraceHelper(mcmultipart.RayTraceHelper) TileMultipartContainer(mcmultipart.block.TileMultipartContainer) RayTraceResult(net.minecraft.util.math.RayTraceResult) IPartSlot(mcmultipart.api.slot.IPartSlot) Vec3d(net.minecraft.util.math.Vec3d) ModDependentMethod(logisticspipes.asm.ModDependentMethod)

Aggregations

Optional (java.util.Optional)1 Random (java.util.Random)1 Nonnull (javax.annotation.Nonnull)1 LPConstants (logisticspipes.LPConstants)1 ModDependentInterface (logisticspipes.asm.ModDependentInterface)1 ModDependentMethod (logisticspipes.asm.ModDependentMethod)1 SimpleServiceLocator (logisticspipes.proxy.SimpleServiceLocator)1 MCMultiPart (mcmultipart.MCMultiPart)1 RayTraceHelper (mcmultipart.RayTraceHelper)1 IMultipartContainerBlock (mcmultipart.api.container.IMultipartContainerBlock)1 IPartInfo (mcmultipart.api.container.IPartInfo)1 IPartSlot (mcmultipart.api.slot.IPartSlot)1 BlockMultipartContainer.getTile (mcmultipart.block.BlockMultipartContainer.getTile)1 TileMultipartContainer (mcmultipart.block.TileMultipartContainer)1 Block (net.minecraft.block.Block)1 BlockContainer (net.minecraft.block.BlockContainer)1 Material (net.minecraft.block.material.Material)1 BlockFaceShape (net.minecraft.block.state.BlockFaceShape)1 IBlockState (net.minecraft.block.state.IBlockState)1 ParticleDigging (net.minecraft.client.particle.ParticleDigging)1