summaryrefslogtreecommitdiff
path: root/src/main/java/com/sosnitzka/taiga/traits/TraitCascade.java
blob: 0d22826bdc0703a93db8f8459b2b5ee44d48422d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package com.sosnitzka.taiga.traits;

import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.world.World;
import slimeknights.tconstruct.library.traits.AbstractTrait;
import slimeknights.tconstruct.library.utils.ToolHelper;

public class TraitCascade extends AbstractTrait {

    public TraitCascade() {
        super("cascade", TextFormatting.DARK_GRAY);
    }

    @Override
    public void afterBlockBreak(ItemStack tool, World world, IBlockState state, BlockPos pos, EntityLivingBase
            player, boolean wasEffective) {
        float f = random.nextFloat();
        if (!world.isRemote && tool.canHarvestBlock(state) && f <= 0.1) {
            double x, y, z, sx, sy, sz;
            sx = x = pos.getX();
            sy = y = pos.getY();
            sz = z = pos.getZ();
            int i = random.nextInt((int) Math.min(300f * (float) ToolHelper.getCurrentDurability(tool) / ToolHelper
                    .getMaxDurability(tool), 50f));
            for (int a = i; a > 0; a--) {
                int r = random.nextInt(3);
                int d = random.nextBoolean() ? 1 : -1;
                if (r == 0) x += d;
                if (r == 1) y += d;
                if (r == 2) z += d;
                BlockPos nextBlock = new BlockPos(x, y, z);
                if (world.getBlockState(nextBlock) == world.getBlockState(pos)) {
                    world.destroyBlock(nextBlock, true);
                    sx = x = nextBlock.getX();
                    sy = y = nextBlock.getY();
                    sz = z = nextBlock.getZ();
                    ToolHelper.damageTool(tool, 1, player);
                } else {
                    x = sx;
                    y = sy;
                    z = sz;
                }
            }
        }
    }
}