/* * Copyright (c) CovertJaguar, 2014 http://railcraft.info * * This code is the property of CovertJaguar * and may only be used with explicit written * permission unless otherwise specified on the * license page at http://railcraft.info/wiki/info:license. */ package mods.railcraft.common.blocks.ore; import java.util.EnumSet; import java.util.Random; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.util.IIcon; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import mods.railcraft.common.core.RailcraftConfig; import mods.railcraft.common.plugins.forge.CreativePlugin; import mods.railcraft.common.plugins.forge.RailcraftRegistry; import mods.railcraft.common.plugins.forge.WorldPlugin; import mods.railcraft.common.util.misc.MiscTools; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.init.Blocks; /** * * @author CovertJaguar <http://www.railcraft.info> */ public class BlockWorldLogic extends Block { private static BlockWorldLogic instance; public static BlockWorldLogic getBlock() { return instance; } public static void registerBlock() { if (instance == null && RailcraftConfig.isBlockEnabled("worldlogic")) { instance = new BlockWorldLogic(); RailcraftRegistry.register(instance); } } public BlockWorldLogic() { super(Material.rock); setBlockName("railcraft.worldlogic"); setResistance(6000000.0F); setBlockUnbreakable(); setStepSound(Block.soundTypeStone); setCreativeTab(CreativePlugin.RAILCRAFT_TAB); disableStats(); setTickRandomly(true); } @Override public void registerBlockIcons(IIconRegister iconRegister) { } @Override public IIcon getIcon(int side, int meta) { return Blocks.bedrock.getIcon(side, meta); } @Override public void onBlockAdded(World world, int x, int y, int z) { super.onBlockAdded(world, x, y, z); world.scheduleBlockUpdate(x, y, z, this, tickRate(world)); } @Override public void updateTick(World world, int x, int y, int z, Random rand) { world.scheduleBlockUpdate(x, y, z, this, tickRate(world)); if (MiscTools.getRand().nextInt(32) != 0) return; BlockOre blockOre = BlockOre.getBlock(); if (blockOre == null || !EnumOre.SALTPETER.isEnabled() || !RailcraftConfig.isWorldGenEnabled("saltpeter")) return; int surfaceY = world.getTopSolidOrLiquidBlock(x, z) - 2; if (surfaceY < 50 || surfaceY > 100) return; Block block = WorldPlugin.getBlock(world, x, surfaceY, z); if (block != Blocks.sand) return; Block above = WorldPlugin.getBlock(world, x, surfaceY + 1, z); if (above != Blocks.sand) return; Block below = WorldPlugin.getBlock(world, x, surfaceY - 1, z); if (below != Blocks.sand && below != Blocks.sandstone) return; int airCount = 0; Block ore = BlockOre.getBlock(); for (ForgeDirection side : EnumSet.of(ForgeDirection.NORTH, ForgeDirection.SOUTH, ForgeDirection.EAST, ForgeDirection.WEST)) { boolean isAir = world.isAirBlock(MiscTools.getXOnSide(x, side), MiscTools.getYOnSide(surfaceY, side), MiscTools.getZOnSide(z, side)); if (isAir) airCount++; if (airCount > 1) return; if (isAir) continue; block = WorldPlugin.getBlockOnSide(world, x, surfaceY, z, side); if (block != Blocks.sand && block != Blocks.sandstone && block != ore) return; } world.setBlock(x, surfaceY, z, ore, EnumOre.SALTPETER.ordinal(), 3); // System.out.println("saltpeter spawned"); } @Override public int tickRate(World world) { return 6000; } }