54 lines
1.6 KiB
Java

package com.hbm.blocks.siege;
import java.util.Random;
import com.hbm.blocks.ModBlocks;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class SiegeShield extends SiegeBase {
public SiegeShield(Material material) {
super(material, 4);
}
@Override
public void updateTick(World world, int x, int y, int z, Random rand) {
int succ = 0;
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
Block b = world.getBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ);
//if the block is already a siege block, do nothing and increment the success counter
if(!this.shouldReplace(b)) {
succ++;
//...if not, check if a new shield can be placed, and try to do so
} else if(this.solidNeighbors(world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ)) {
succ++;
world.setBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, this);
}
}
//if all the blocks are siege blocks now, replace with an internal
if(succ == 6) {
world.setBlock(x, y, z, ModBlocks.siege_internal);
if(rand.nextInt(10) == 0) {
Block above = world.getBlock(x, y + 2, z);
Block surface = world.getBlock(x, y + 3, z);
//if the block above the upper shield is solid and *above that* is air, place a hole
if(above.getMaterial() != Material.air && above.isNormalCube() && (surface.getMaterial() == Material.air || !surface.isNormalCube())) {
world.setBlock(x, y + 2, z, ModBlocks.siege_hole);
}
}
}
}
}