package common.init;

import common.block.*;
import common.block.artificial.BlockBed;
import common.block.artificial.BlockBookshelf;
import common.block.artificial.BlockCake;
import common.block.artificial.BlockCarpet;
import common.block.artificial.BlockCompressedPowered;
import common.block.artificial.BlockDoor;
import common.block.artificial.BlockDragonEgg;
import common.block.artificial.BlockFence;
import common.block.artificial.BlockFenceGate;
import common.block.artificial.BlockFloorPortal;
import common.block.artificial.BlockFlowerPot;
import common.block.artificial.BlockGlass;
import common.block.artificial.BlockHay;
import common.block.artificial.BlockLadder;
import common.block.artificial.BlockMetalBlock;
import common.block.artificial.BlockPane;
import common.block.artificial.BlockPortal;
import common.block.artificial.BlockPortalFrame;
import common.block.artificial.BlockQuartz;
import common.block.artificial.BlockQuartzPillar;
import common.block.artificial.BlockSkull;
import common.block.artificial.BlockSlab;
import common.block.artificial.BlockStainedGlass;
import common.block.artificial.BlockStainedGlassPane;
import common.block.artificial.BlockStairs;
import common.block.artificial.BlockTrapDoor;
import common.block.artificial.BlockWall;
import common.block.artificial.BlockWool;
import common.block.foliage.BlockBlackenedSoil;
import common.block.foliage.BlockBlueShroom;
import common.block.foliage.BlockCactus;
import common.block.foliage.BlockCarrot;
import common.block.foliage.BlockCocoa;
import common.block.foliage.BlockCrops;
import common.block.foliage.BlockDeadBush;
import common.block.foliage.BlockDoublePlant;
import common.block.foliage.BlockDryLeaves;
import common.block.foliage.BlockFarmland;
import common.block.foliage.BlockFlower;
import common.block.foliage.BlockGrass;
import common.block.foliage.BlockHugeMushroom;
import common.block.foliage.BlockLeaves;
import common.block.foliage.BlockLilyPad;
import common.block.foliage.BlockLog;
import common.block.foliage.BlockMelon;
import common.block.foliage.BlockMushroom;
import common.block.foliage.BlockMycelium;
import common.block.foliage.BlockPotato;
import common.block.foliage.BlockPumpkin;
import common.block.foliage.BlockReed;
import common.block.foliage.BlockSapling;
import common.block.foliage.BlockStem;
import common.block.foliage.BlockTallGrass;
import common.block.foliage.BlockTianSoil;
import common.block.foliage.BlockVine;
import common.block.foliage.BlockWart;
import common.block.foliage.LeavesType;
import common.block.liquid.BlockDynamicLiquid;
import common.block.liquid.BlockStaticLiquid;
import common.block.natural.BlockBedrock;
import common.block.natural.BlockBlackenedDirt;
import common.block.natural.BlockBlackenedStone;
import common.block.natural.BlockClay;
import common.block.natural.BlockColoredClay;
import common.block.natural.BlockFire;
import common.block.natural.BlockGlowstone;
import common.block.natural.BlockGravel;
import common.block.natural.BlockHardenedClay;
import common.block.natural.BlockHellRock;
import common.block.natural.BlockIce;
import common.block.natural.BlockMetalOre;
import common.block.natural.BlockObsidian;
import common.block.natural.BlockOre;
import common.block.natural.BlockPackedIce;
import common.block.natural.BlockPodzol;
import common.block.natural.BlockRedstoneOre;
import common.block.natural.BlockSandStone;
import common.block.natural.BlockSlime;
import common.block.natural.BlockSnow;
import common.block.natural.BlockSnowBlock;
import common.block.natural.BlockSoulFire;
import common.block.natural.BlockSoulSand;
import common.block.natural.BlockStone;
import common.block.natural.BlockTintedFire;
import common.block.natural.BlockWeb;
import common.block.tech.BlockAnvil;
import common.block.tech.BlockBeacon;
import common.block.tech.BlockBrewingStand;
import common.block.tech.BlockButton;
import common.block.tech.BlockCauldron;
import common.block.tech.BlockChest;
import common.block.tech.BlockCore;
import common.block.tech.BlockDaylightDetector;
import common.block.tech.BlockDispenser;
import common.block.tech.BlockDropper;
import common.block.tech.BlockEnchantmentTable;
import common.block.tech.BlockFurnace;
import common.block.tech.BlockHopper;
import common.block.tech.BlockJukebox;
import common.block.tech.BlockLever;
import common.block.tech.BlockMobSpawner;
import common.block.tech.BlockNote;
import common.block.tech.BlockNuke;
import common.block.tech.BlockPistonBase;
import common.block.tech.BlockPistonHead;
import common.block.tech.BlockPistonMoving;
import common.block.tech.BlockPressurePlate;
import common.block.tech.BlockPressurePlateWeighted;
import common.block.tech.BlockRail;
import common.block.tech.BlockRailDetector;
import common.block.tech.BlockRailPowered;
import common.block.tech.BlockRedstoneComparator;
import common.block.tech.BlockRedstoneLight;
import common.block.tech.BlockRedstoneRepeater;
import common.block.tech.BlockRedstoneTorch;
import common.block.tech.BlockRedstoneWire;
import common.block.tech.BlockTNT;
import common.block.tech.BlockTianReactor;
import common.block.tech.BlockTorch;
import common.block.tech.BlockTripWire;
import common.block.tech.BlockTripWireHook;
import common.block.tech.BlockWarpChest;
import common.block.tech.BlockWorkbench;
import common.block.tile.BlockBannerHanging;
import common.block.tile.BlockBannerStanding;
import common.block.tile.BlockStandingSign;
import common.block.tile.BlockWallSign;
import common.color.DyeColor;
import common.item.CheatTab;
import common.log.Log;
import common.model.TextureAnimation;
import common.util.Mapping;
import common.util.Util;
import common.world.State;

public abstract class BlockRegistry {
	public static final Mapping<Block> REGISTRY = new Mapping("air");
	
	private static int nextBlockId = 0;

	public static int getIdFromBlock(Block block) {
		return REGISTRY.getId(block);
	}

	public static Block getBlockById(int id) {
		return REGISTRY.byId(id);
	}

	public static String getNameFromBlock(Block block) {
		return REGISTRY.getName(block);
	}

	public static Block getRegisteredBlock(String name) {
		return REGISTRY.byName(name);
	}

	public static int getStateId(State state) {
		Block block = state.getBlock();
		return getIdFromBlock(block) + (block.getMetaFromState(state) << 12);
	}

	public static State getStateById(int id) {
		int i = id & 4095;
		int j = id >> 12 & 15;
		return getBlockById(i).getStateFromMeta(j);
	}

	private static void registerBlock(String name, Block block) {
		REGISTRY.register(nextBlockId++, name, block);
	}
	
	private static void registerFluid(String name, String display, boolean infinite, LiquidType type, boolean opaque, int light, int rate, 
			float radiation, Object still, Object flowing) {
		BlockDynamicLiquid dy = (BlockDynamicLiquid)(new BlockDynamicLiquid(type.material, infinite, opaque, rate, flowing)).setHardness(100.0F)
				.setLightOpacity(opaque ? 0 : 3).setLightLevel((float)light / 15.0f).setDisplay(display)
				.setRadiation(radiation);
		BlockStaticLiquid st = (BlockStaticLiquid)(new BlockStaticLiquid(type.material, opaque, rate, still, dy)).setHardness(100.0F)
				.setLightOpacity(opaque ? 0 : 3).setLightLevel((float)light / 15.0f).setDisplay(display)
				.setRadiation(radiation);
		registerBlock("flowing_" + name, dy);
		registerBlock(name, st);
	}

	static void register() {
		registerBlock("air", (new BlockAir()).setDisplay("Luft"));
		Block stone = (new BlockStone()).setHardness(1.5F).setResistance(10.0F).setStepSound(SoundType.STONE).setDisplay("Stein");
		registerBlock("stone", stone);
		registerBlock("bedrock", (new BlockBedrock()).setHardness(1000.0F).setResistance(100000.0F).setStepSound(SoundType.STONE)
				.setDisplay("Grundgestein").setTab(CheatTab.NATURE).setMiningLevel(6));
		registerBlock("rock", (new Block(Material.SOLID)).setHardness(2.0F).setResistance(15.0F).setStepSound(SoundType.STONE).setDisplay("Felsen").setTab(CheatTab.NATURE));
		registerBlock("smooth_rock", (new Block(Material.SOLID)).setHardness(2.0F).setResistance(15.0F).setStepSound(SoundType.STONE).setDisplay("Glatter Felsen").setTab(CheatTab.NATURE));
		registerBlock("hellrock", (new BlockHellRock()).setHardness(0.4F).setStepSound(SoundType.STONE).setDisplay("Höllenstein"));
		registerBlock("cell_rock", (new Block(Material.LOOSE)).setHardness(1.0F).setResistance(3.0F)
				.setStepSound(SoundType.SLIME).setDisplay("Zellstein").setTab(CheatTab.NATURE));
		registerBlock("moon_rock", (new Block(Material.SOLID)).setHardness(2.5F).setResistance(10.0F)
				.setStepSound(SoundType.STONE).setDisplay("Mondgestein").setTab(CheatTab.NATURE));
		Block cobblestone = (new Block(Material.SOLID)).setHardness(2.0F).setResistance(10.0F).setStepSound(SoundType.STONE)
				.setDisplay("Bruchstein").setTab(CheatTab.NATURE);
		registerBlock("cobblestone", cobblestone);
		Block mossyCobblestone = (new Block(Material.SOLID)).setHardness(2.0F).setResistance(10.0F).setStepSound(SoundType.STONE)
				.setDisplay("Bemooster Bruchstein").setTab(CheatTab.NATURE);
		registerBlock("mossy_cobblestone", mossyCobblestone);
		Block sandstone = (new BlockSandStone("normal")).setStepSound(SoundType.STONE).setHardness(0.8F).setDisplay("Sandstein");
		registerBlock("sandstone", sandstone);
		registerBlock("smooth_sandstone", (new BlockSandStone("smooth")).setStepSound(SoundType.STONE).setHardness(0.8F).setDisplay("Glatter Sandstein"));
		registerBlock("carved_sandstone", (new BlockSandStone("carved")).setStepSound(SoundType.STONE).setHardness(0.8F).setDisplay("Gemeißelter Sandstein"));
		registerBlock("obsidian", (new BlockObsidian()).setHardness(50.0F).setResistance(2000.0F).setStepSound(SoundType.STONE)
				.setDisplay("Obsidian").setMiningLevel(3));
		registerBlock("clay", (new BlockClay()).setHardness(0.6F).setStepSound(SoundType.GRAVEL).setDisplay("Ton").setShovelHarvestable());
		registerBlock("hardened_clay", (new BlockHardenedClay()).setHardness(1.25F).setResistance(7.0F).setStepSound(SoundType.STONE).setDisplay("Gebrannter Ton"));
		for(DyeColor color : DyeColor.values()) {
			registerBlock(color.getName() + "_clay", (new BlockColoredClay(color)).setHardness(1.25F).setResistance(7.0F)
					.setStepSound(SoundType.STONE).setDisplay(color.getSubject(null) + " gefärbter Ton"));
		}
		registerBlock("coal_block", (new Block(Material.SOLID)).setHardness(5.0F).setResistance(10.0F)
				.setStepSound(SoundType.STONE).setDisplay("Kohleblock").setTab(CheatTab.NATURE).setFlammable(5, 5));
		registerBlock("sand", (new BlockFalling(Material.LOOSE)).setHardness(0.5F).setStepSound(SoundType.SAND).setDisplay("Sand").setShovelHarvestable().setTab(CheatTab.NATURE));
		registerBlock("red_sand", (new BlockFalling(Material.LOOSE)).setHardness(0.5F).setStepSound(SoundType.SAND).setDisplay("Roter Sand").setShovelHarvestable().setTab(CheatTab.NATURE));
		registerBlock("gravel", (new BlockGravel()).setHardness(0.6F).setStepSound(SoundType.GRAVEL).setDisplay("Kies").setShovelHarvestable());
		registerBlock("ash", (new Block(Material.LOOSE)).setHardness(0.2F).setStepSound(SoundType.SAND).setDisplay("Asche")
		.setTab(CheatTab.NATURE).setShovelHarvestable());
		registerBlock("snow_layer", (new BlockSnow()).setHardness(0.1F).setStepSound(SoundType.SNOW).setDisplay("Schnee").setLightOpacity(0)
				.setShovelHarvestable());
		registerBlock("snow", (new BlockSnowBlock()).setHardness(0.2F).setStepSound(SoundType.SNOW).setDisplay("Schnee").setShovelHarvestable());
		registerBlock("ice", (new BlockIce()).setHardness(0.5F).setLightOpacity(3).setStepSound(SoundType.GLASS).setDisplay("Eis").setMiningLevel(0));
		registerBlock("packed_ice", (new BlockPackedIce()).setHardness(0.5F).setStepSound(SoundType.GLASS).setDisplay("Packeis").setMiningLevel(0));
		registerBlock("soul_sand", (new BlockSoulSand()).setHardness(0.5F).setStepSound(SoundType.SAND).setDisplay("Seelensand").setShovelHarvestable());
		registerBlock("glowstone", (new BlockGlowstone(Material.TRANSLUCENT)).setHardness(0.3F).setStepSound(SoundType.GLASS).setLightLevel(1.0F)
				.setDisplay("Glowstone"));
		registerBlock("blackened_stone", (new BlockBlackenedStone()).setHardness(1.5F).setResistance(10.0F).setStepSound(SoundType.STONE).setDisplay("Schwarzstein"));
		registerBlock("blackened_cobble", (new Block(Material.SOLID)).setHardness(2.0F).setResistance(10.0F).setStepSound(SoundType.STONE)
				.setDisplay("Schwarzbruchstein").setTab(CheatTab.NATURE));
		
		
		registerFluid("water", "Wasser", true, LiquidType.WATER, false, 0, 5, 0.0f, TextureAnimation.WATER, TextureAnimation.WATERFLOW);
		registerFluid("lava", "Lava", false, LiquidType.LAVA, true, 15, -30, 0.0f, 2, 3);
		registerFluid("magma", "Magma", false, LiquidType.HOT, true, 15, 40, 0.0f, TextureAnimation.LAVA, TextureAnimation.LAVAFLOW);
        registerFluid("mercury", "Quecksilber", false, LiquidType.COLD, true, 0, 40, 0.0f, 8, 4);
        registerFluid("hydrogen", "Wasserstoff", false, LiquidType.COLD, true, 0, 50, 0.0f, 8, 4);
        registerFluid("acid", "Säure", false, LiquidType.HOT, false, 0, 5, 0.0f, 1, 1);
        registerFluid("slime", "Schleim", false, LiquidType.COLD, true, 0, 50, 0.0f, 8, 4);
        registerFluid("goo", "Klebrige Masse", false, LiquidType.COLD, true, 0, 60, 0.0f, 10, 5);
        registerFluid("nukage", "Radioaktive Masse", false, LiquidType.COLD, true, 10, 10, 4.0f, 2, 2);
        registerFluid("blood", "Blut", false, LiquidType.COLD, false, 0, 10, 0.0f, 2, 1);
		registerFluid("springwater", "Klares Wasser", true, LiquidType.COLD, false, 0, 5, 0.0f, 1, 1);
        

		registerBlock("coal_ore", (new BlockOre()).setHardness(3.0F).setResistance(5.0F).setStepSound(SoundType.STONE).setDisplay("Steinkohle"));
		registerBlock("lapis_ore", (new BlockOre()).setHardness(3.0F).setResistance(5.0F).setStepSound(SoundType.STONE)
				.setDisplay("Lapislazulierz").setMiningLevel(1));
		registerBlock("emerald_ore", (new BlockOre()).setHardness(3.0F).setResistance(5.0F).setStepSound(SoundType.STONE)
				.setDisplay("Smaragderz").setMiningLevel(2));
		registerBlock("quartz_ore", (new BlockOre()).setHardness(3.0F).setResistance(5.0F).setStepSound(SoundType.STONE)
				.setDisplay("Quarzerz"));
		registerBlock("black_quartz_ore", (new BlockOre()).setHardness(3.0F).setResistance(5.0F).setStepSound(SoundType.STONE)
				.setDisplay("Schwarzes Quarzerz"));

		registerBlock("redstone_ore", (new BlockRedstoneOre(false)).setHardness(3.0F).setResistance(5.0F).setStepSound(SoundType.STONE)
				.setDisplay("Redstone-Erz").setTab(CheatTab.GEMS).setMiningLevel(2));
		registerBlock("lit_redstone_ore", (new BlockRedstoneOre(true)).setLightLevel(0.625F).setHardness(3.0F).setResistance(5.0F)
				.setStepSound(SoundType.STONE).setDisplay("Redstone-Erz").setMiningLevel(2));
		for(MetalType metal : MetalType.values()) {
//			String loc = metal.name.substring(0, 1).toUpperCase() + metal.name.substring(1);
			registerBlock(metal.name + "_ore", (new BlockMetalOre(metal)).setHardness(3.0F).setResistance(5.0F)
					.setDisplay(metal.display + "erz").setMiningLevel(1));
		}
		for(OreType ore : OreType.values()) {
//			String loc = ore.name.substring(0, 1).toUpperCase() + ore.name.substring(1);
			registerBlock(ore.name + "_ore", (new BlockOre()).setHardness(3.0F).setResistance(5.0F).setStepSound(SoundType.STONE)
					.setDisplay(ore.display + "erz").setMiningLevel(ore.material.getHarvestLevel() - 1));
		}

		
		

		registerBlock("dirt", (new Block(Material.LOOSE)).setHardness(0.5F).setStepSound(SoundType.GRAVEL).setDisplay("Erde").setShovelHarvestable().setTab(CheatTab.NATURE));
		registerBlock("grass", (new BlockGrass()).setHardness(0.6F).setStepSound(SoundType.GRASS).setDisplay("Gras").setShovelHarvestable());
		registerBlock("coarse_dirt", (new Block(Material.LOOSE)).setHardness(0.5F).setStepSound(SoundType.GRAVEL).setDisplay("Grobe Erde").setShovelHarvestable().setTab(CheatTab.NATURE));
		registerBlock("podzol", (new BlockPodzol()).setHardness(0.5F).setStepSound(SoundType.GRAVEL).setDisplay("Podsol").setShovelHarvestable());
		registerBlock("mycelium", (new BlockMycelium()).setHardness(0.6F).setStepSound(SoundType.GRASS).setDisplay("Myzel").setShovelHarvestable());
		registerBlock("tian", (new Block(Material.SOLID)).setHardness(2.0F).setResistance(15.0F).setStepSound(SoundType.STONE)
				.setDisplay("Tian").setTab(CheatTab.NATURE));
		registerBlock("tian_soil", (new BlockTianSoil()).setHardness(2.0F).setResistance(15.0F).setStepSound(SoundType.STONE)
				.setDisplay("Tianerde").setTab(CheatTab.NATURE));
		registerBlock("moon_cheese", (new BlockTreasure(Material.SOFT)).setHardness(1.5F).setResistance(5.0F)
				.setStepSound(SoundType.CLOTH).setDisplay("Mondkäse").setTab(CheatTab.NATURE));
		registerBlock("slime_block", (new BlockSlime()).setDisplay("Schleimblock").setStepSound(SoundType.SLIME));
		registerBlock("blackened_dirt", (new BlockBlackenedDirt()).setHardness(0.5F).setStepSound(SoundType.GRAVEL).setDisplay("Schwarzerde").setShovelHarvestable());
		registerBlock("blackened_soil", (new BlockBlackenedSoil()).setHardness(0.6F).setStepSound(SoundType.GRASS).setDisplay("Schwarzgrund").setShovelHarvestable());
		
		

		
		for(BlockTallGrass.EnumType type : BlockTallGrass.EnumType.values()) {
			registerBlock(type.getName(), (new BlockTallGrass(type)).setHardness(0.0F).setStepSound(SoundType.GRASS).setDisplay(type.getDisplay()).setShearsEfficiency(0));
		}
		registerBlock("deadbush", (new BlockDeadBush()).setHardness(0.0F).setStepSound(SoundType.GRASS).setDisplay("Toter Busch"));
		for(BlockFlower.EnumFlowerType type : BlockFlower.EnumFlowerType.values()) {
			registerBlock(type.getName(), (new BlockFlower(type)).setHardness(0.0F).setStepSound(SoundType.GRASS).setDisplay(type.getDisplay()));
		}
		for(BlockDoublePlant.EnumPlantType type : BlockDoublePlant.EnumPlantType.values()) {
			registerBlock(type.getName(), new BlockDoublePlant(type).setDisplay(type.getDisplay()));
		}
		Block cactus = (new BlockCactus()).setHardness(0.4F).setStepSound(SoundType.CLOTH).setDisplay("Kaktus");
		registerBlock("cactus", cactus);
		registerBlock("reeds", (new BlockReed()).setHardness(0.0F).setStepSound(SoundType.GRASS).setDisplay("Zuckerrohr"));
		registerBlock("vine", (new BlockVine()).setHardness(0.2F).setStepSound(SoundType.GRASS).setDisplay("Ranken").setShearsEfficiency(0));
		registerBlock("waterlily", (new BlockLilyPad()).setHardness(0.0F).setStepSound(SoundType.GRASS).setDisplay("Seerosenblatt"));
		registerBlock("cocoa", (new BlockCocoa()).setHardness(0.2F).setResistance(5.0F).setStepSound(SoundType.WOOD).setDisplay("Kakao"));
		
		

		Block brownMushroom = (new BlockMushroom()).setHardness(0.0F).setStepSound(SoundType.GRASS).setLightLevel(0.125F)
				.setDisplay("Pilz");
		registerBlock("brown_mushroom", brownMushroom);
		registerBlock("brown_mushroom_block", (new BlockHugeMushroom(Material.WOOD, brownMushroom)).setHardness(0.2F)
				.setStepSound(SoundType.WOOD).setDisplay("Pilzblock").setTab(CheatTab.PLANTS));
		Block redMushrooom = (new BlockMushroom()).setHardness(0.0F).setStepSound(SoundType.GRASS).setDisplay("Pilz");
		registerBlock("red_mushroom", redMushrooom);
		registerBlock("red_mushroom_block", (new BlockHugeMushroom(Material.WOOD, redMushrooom)).setHardness(0.2F)
				.setStepSound(SoundType.WOOD).setDisplay("Pilzblock").setTab(CheatTab.PLANTS));
		registerBlock("blue_mushroom", (new BlockBlueShroom()).setHardness(0.0F).setStepSound(SoundType.GRASS).setLightLevel(0.5F)
				.setDisplay("Tianpilz"));

		Block pumpkin = (new BlockPumpkin()).setHardness(1.0F).setStepSound(SoundType.WOOD).setDisplay("Kürbis");
		registerBlock("pumpkin", pumpkin);
		registerBlock("pumpkin_stem", (new BlockStem(pumpkin, "Kürbiskerne")).setHardness(0.0F).setStepSound(SoundType.WOOD).setDisplay("Kürbisstamm"));
		Block melon = (new BlockMelon()).setHardness(1.0F).setStepSound(SoundType.WOOD).setDisplay("Melone");
		registerBlock("melon_block", melon);
		registerBlock("melon_stem", (new BlockStem(melon, "Melonenkerne")).setHardness(0.0F).setStepSound(SoundType.WOOD).setDisplay("Melonenstamm"));
		

		registerBlock("dry_leaves", (new BlockDryLeaves()).setDisplay("Vertrocknetes Laub"));
		for(WoodType wood : WoodType.values()) {
			registerBlock(wood.getName() + "_log", (new BlockLog()).setDisplay(wood.getDisplay() + "holz"));
			for(LeavesType type : LeavesType.values()) {
				registerBlock(wood.getName() + "_leaves_" + type.getName(), (new BlockLeaves(wood, type)).setDisplay(wood.getDisplay() + "laub (" + type.getDisplayName() + ")"));
			}
			registerBlock(wood.getName() + "_sapling", (new BlockSapling(wood)).setHardness(0.0F).setStepSound(SoundType.GRASS)
					.setDisplay(wood.getDisplay() + "setzling"));
		}

		registerBlock("soul_fire", (new BlockSoulFire()).setHardness(0.0F).setLightLevel(1.0F).setStepSound(SoundType.CLOTH).setDisplay("Feuer der Seelen"));
		registerBlock("black_fire", (new BlockTintedFire(0x202020)).setHardness(0.0F).setLightLevel(1.0F).setStepSound(SoundType.CLOTH).setDisplay("Dunkles Feuer"));
		registerBlock("web", (new BlockWeb()).setLightOpacity(1).setHardness(4.0F).setDisplay("Spinnennetz"));
		registerBlock("fire", (new BlockFire()).setHardness(0.0F).setLightLevel(1.0F).setStepSound(SoundType.CLOTH).setDisplay("Feuer"));
        
        
		
		registerBlock("lapis_block", (new Block(Material.SOLID)).setHardness(3.0F).setResistance(5.0F)
				.setStepSound(SoundType.STONE).setDisplay("Lapislazuliblock").setTab(CheatTab.GEMS).setMiningLevel(1));
		registerBlock("emerald_block", (new Block(Material.SOLID)).setHardness(5.0F).setResistance(10.0F)
				.setStepSound(SoundType.STONE).setDisplay("Smaragdblock").setTab(CheatTab.GEMS).setMiningLevel(2));
		registerBlock("redstone_block", (new BlockCompressedPowered(Material.SOLID)).setHardness(5.0F).setResistance(10.0F)
				.setStepSound(SoundType.STONE).setDisplay("Redstone-Block").setTab(CheatTab.TECHNOLOGY));
		
		registerBlock("glass", (new BlockGlass()).setHardness(0.3F).setStepSound(SoundType.GLASS).setDisplay("Glas"));
		for(DyeColor color : DyeColor.values()) {
			registerBlock(color.getName() + "_glass", (new BlockStainedGlass(color)).setHardness(0.3F).setStepSound(SoundType.GLASS).setDisplay(color.getSubject(null) + " gefärbtes Glas"));
		}
		registerBlock("glass_pane", (new BlockPane(Material.TRANSLUCENT, false)).setHardness(0.3F).setStepSound(SoundType.GLASS).setDisplay("Glasscheibe"));
		for(DyeColor color : DyeColor.values()) {
			registerBlock(color.getName() + "_glass_pane", (new BlockStainedGlassPane(color)).setHardness(0.3F).setStepSound(SoundType.GLASS).setDisplay(color.getSubject(null) + " gefärbte Glasscheibe"));
		}
		
		
		for(DyeColor color : DyeColor.values()) {
			registerBlock(color.getName() + "_wool", (new BlockWool(color)).setHardness(0.8F).setStepSound(SoundType.CLOTH).setDisplay(color.getSubject(-1) + " Wolle")
				.setShearsEfficiency(1));
		}
		for(DyeColor color : DyeColor.values()) {
			registerBlock(color.getName() + "_carpet", (new BlockCarpet(color)).setHardness(0.1F).setStepSound(SoundType.CLOTH).setDisplay(color.getSubject(1) + " Teppich").setLightOpacity(0));
		}
        for(DyeColor color : BlockBed.COLORS) {
        	registerBlock(color.getName() + "_bed", (new BlockBed(color)).setStepSound(SoundType.WOOD).setHardness(0.2F).setDisplay(color.getSubject(0) + " Bett"));
        }

		registerBlock("ladder", (new BlockLadder()).setHardness(0.4F).setStepSound(SoundType.LADDER).setDisplay("Leiter").setAxeHarvestable());
		registerBlock("torch", (new BlockTorch()).setHardness(0.0F).setLightLevel(0.9375F).setStepSound(SoundType.WOOD).setDisplay("Fackel"));
		registerBlock("lamp", (new Block(Material.TRANSLUCENT)).setHardness(0.3F).setStepSound(SoundType.GLASS).setLightLevel(1.0F)
				.setDisplay("Lampe").setTab(CheatTab.TECHNOLOGY));
		registerBlock("bookshelf", (new BlockBookshelf()).setHardness(1.5F).setStepSound(SoundType.WOOD).setDisplay("Bücherregal"));
		registerBlock("cake", (new BlockCake()).setHardness(0.5F).setStepSound(SoundType.CLOTH).setDisplay("Kuchen"));
		registerBlock("dragon_egg", (new BlockDragonEgg()).setHardness(3.0F).setResistance(15.0F).setStepSound(SoundType.STONE)
				.setLightLevel(0.125F).setDisplay("Drachenei").setTab(CheatTab.DECORATION));
		registerBlock("flowerpot", (new BlockFlowerPot(null)).setHardness(0.0F).setStepSound(SoundType.STONE).setDisplay("Blumentopf"));
		registerBlock("flowerpot_cactus", (new BlockFlowerPot(cactus)).setHardness(0.0F).setStepSound(SoundType.STONE).setDisplay("Blumentopf mit " + cactus.getDisplay()));
		for(BlockFlower.EnumFlowerType type : BlockFlower.EnumFlowerType.values()) {
			registerBlock("flowerpot_" + type.getName(), (new BlockFlowerPot(BlockFlower.getByType(type))).setHardness(0.0F).setStepSound(SoundType.STONE).setDisplay("Blumentopf mit " + type.getDisplay()));
		}
		registerBlock("sponge", (new Block(Material.LOOSE)).setHardness(0.6F).setStepSound(SoundType.GRASS).setDisplay("Schwamm")
				.setTab(CheatTab.DECORATION));
		registerBlock("skull", (new BlockSkull()).setHardness(1.0F).setStepSound(SoundType.STONE).setDisplay("Schädel").setTab(CheatTab.DECORATION));
		registerBlock("lit_pumpkin", (new BlockPumpkin()).setHardness(1.0F).setStepSound(SoundType.WOOD).setLightLevel(1.0F).setDisplay("Kürbislaterne"));
		registerBlock("hay_block", (new BlockHay()).setHardness(0.5F).setStepSound(SoundType.GRASS).setDisplay("Strohballen")
				.setTab(CheatTab.DECORATION));
		registerBlock("sign", (new BlockStandingSign()).setHardness(1.0F).setStepSound(SoundType.WOOD).setDisplay("Schild"));
		registerBlock("wall_sign", (new BlockWallSign()).setHardness(1.0F).setStepSound(SoundType.WOOD).setDisplay("Schild"));
		registerBlock("banner", (new BlockBannerStanding()).setHardness(1.0F).setStepSound(SoundType.WOOD).setDisplay("Banner"));
		registerBlock("wall_banner", (new BlockBannerHanging()).setHardness(1.0F).setStepSound(SoundType.WOOD).setDisplay("Banner"));
		
		registerBlock("portal", (new BlockPortal()).setHardness(0.0F).setStepSound(SoundType.GLASS).setLightLevel(0.75F).setDisplay("Portal"));
		registerBlock("floor_portal", (new BlockFloorPortal(Material.PORTAL)).setHardness(0.0F).setDisplay("Portal"));
		registerBlock("portal_frame", (new BlockPortalFrame()).setStepSound(SoundType.GLASS).setLightLevel(0.125F).setHardness(5.0F)
				.setDisplay("Portalrahmen").setResistance(2000.0F).setTab(CheatTab.TECHNOLOGY));
		
		registerBlock("farmland", (new BlockFarmland()).setHardness(0.6F).setStepSound(SoundType.GRAVEL).setDisplay("Ackerboden")
				.setShovelHarvestable().setTab(CheatTab.PLANTS));
		registerBlock("wheat", (new BlockCrops()).setDisplay("Getreide"));
		registerBlock("carrot", (new BlockCarrot()).setDisplay("Karotten"));
		registerBlock("potato", (new BlockPotato()).setDisplay("Kartoffeln"));
		registerBlock("soul_wart", (new BlockWart()).setDisplay("Seelenwarze"));
		
		


		for(MetalType metal : MetalType.values()) {
//			String loc = metal.name.substring(0, 1).toUpperCase() + metal.name.substring(1);
			registerBlock(metal.name + "_block", (new BlockMetalBlock(metal)).setHardness(5.0F).setResistance(10.0F)
			.setDisplay(metal.display + "block").setMiningLevel(1));
		}
		for(OreType ore : OreType.values()) {
//			String loc = ore.name.substring(0, 1).toUpperCase() + ore.name.substring(1);
			registerBlock(ore.name + "_block", (new Block(Material.SOLID)).setHardness(5.0F).setResistance(10.0F).setStepSound(SoundType.STONE)
			.setDisplay(ore.display + "block").setTab(CheatTab.GEMS)
			.setMiningLevel(ore.material.getHarvestLevel() - 1));
		}
		




		
		registerBlock("stone_slab", (new BlockSlab(Material.SOLID, "stone_slab_side", "double_stone_top", "double_stone_top"))
		.setHardness(2.0F).setResistance(10.0F).setStepSound(SoundType.STONE).setDisplay("Steinstufe"));
		registerBlock("stone_stairs", (new BlockStairs(stone.getState())).setDisplay("Steintreppe"));
		
		registerBlock("cobblestone_slab", (new BlockSlab(Material.SOLID, "cobblestone"))
		.setHardness(2.0F).setResistance(10.0F).setStepSound(SoundType.STONE).setDisplay("Bruchsteinstufe"));
		registerBlock("cobblestone_stairs", (new BlockStairs(cobblestone.getState())).setDisplay("Bruchsteintreppe"));
		registerBlock("cobblestone_wall", (new BlockWall(cobblestone, "cobblestone")).setDisplay("Bruchsteinmauer"));
		registerBlock("mossy_cobblestone_wall", (new BlockWall(mossyCobblestone, "mossy_cobblestone")).setDisplay("Bemooste Bruchsteinmauer"));
		
		registerBlock("sandstone_slab", (new BlockSlab(Material.SOLID, "sandstone_normal", "sandstone_bottom", "sandstone_all"))
		.setHardness(2.0F).setResistance(10.0F).setStepSound(SoundType.STONE).setDisplay("Sandsteinstufe"));
		registerBlock("sandstone_stairs", (new BlockStairs(sandstone.getState(),
				"sandstone_bottom", "sandstone_all")) // fix type
				.setDisplay("Sandsteintreppe"));
		
		Block quartz = (new BlockQuartz(false, false)).setStepSound(SoundType.STONE).setHardness(0.8F).setDisplay("Quarzblock");
		registerBlock("quartz_block", quartz);
		registerBlock("quartz_ornaments", (new BlockQuartz(false, true)).setStepSound(SoundType.STONE).setHardness(0.8F).setDisplay("Gemeißelter Quarzblock"));
		registerBlock("quartz_pillar", (new BlockQuartzPillar(false)).setStepSound(SoundType.STONE).setHardness(0.8F).setDisplay("Quarzsäule"));
		registerBlock("quartz_slab", (new BlockSlab(Material.SOLID, "quartz_block_side", "quartz_block_bottom", "quartz_top"))
		.setHardness(2.0F).setResistance(10.0F).setStepSound(SoundType.STONE).setDisplay("Quarzstufe"));
		registerBlock("quartz_stairs", (new BlockStairs(quartz.getState(),
				"quartz_block_bottom", "quartz_top"))
				.setDisplay("Quarztreppe"));
		
		registerBlock("iron_bars", (new BlockPane(Material.SOLID, true)).setHardness(5.0F).setResistance(10.0F).setStepSound(SoundType.STONE)
				.setDisplay("Eisengitter"));
		registerBlock("iron_door", (new BlockDoor(Material.SOLID)).setHardness(5.0F).setStepSound(SoundType.STONE).setDisplay("Eisentür"));
		registerBlock("iron_trapdoor", (new BlockTrapDoor(Material.SOLID)).setHardness(5.0F).setStepSound(SoundType.STONE).setDisplay("Eisenfalltür"));

		Block brick = (new Block(Material.SOLID)).setHardness(2.0F).setResistance(10.0F).setStepSound(SoundType.STONE)
				.setDisplay("Ziegelsteine").setTab(CheatTab.BLOCKS);
		registerBlock("brick_block", brick);
		registerBlock("brick_slab", (new BlockSlab(Material.SOLID, "brick_block"))
		.setHardness(2.0F).setResistance(10.0F).setStepSound(SoundType.STONE).setDisplay("Ziegelstufe"));
		registerBlock("brick_stairs", (new BlockStairs(brick.getState())).setDisplay("Ziegeltreppe"));

		Block stonebrick = (new Block(Material.SOLID)).setHardness(1.5F).setResistance(10.0F).setStepSound(SoundType.STONE)
					.setDisplay("Steinziegel").setTab(CheatTab.BLOCKS);
		registerBlock("stonebrick", stonebrick);
		registerBlock("mossy_stonebrick", (new Block(Material.SOLID)).setHardness(1.5F).setResistance(10.0F).setStepSound(SoundType.STONE)
				.setDisplay("Bemooste Steinziegel").setTab(CheatTab.BLOCKS));
		registerBlock("cracked_stonebrick", (new Block(Material.SOLID)).setHardness(1.5F).setResistance(10.0F).setStepSound(SoundType.STONE)
				.setDisplay("Rissige Steinziegel").setTab(CheatTab.BLOCKS));
		registerBlock("carved_stonebrick", (new Block(Material.SOLID)).setHardness(1.5F).setResistance(10.0F).setStepSound(SoundType.STONE)
				.setDisplay("Gemeißelte Steinziegel").setTab(CheatTab.BLOCKS));
		registerBlock("stonebrick_slab", (new BlockSlab(Material.SOLID, "stonebrick"))
		.setHardness(2.0F).setResistance(10.0F).setStepSound(SoundType.STONE).setDisplay("Steinziegelstufe"));
		registerBlock("stonebrick_stairs", (new BlockStairs(stonebrick.getState()))
				.setDisplay("Steinziegeltreppe"));
		

		Block bloodBrick = (new Block(Material.SOLID)).setHardness(2.0F).setResistance(10.0F).setStepSound(SoundType.STONE)
				.setDisplay("Blutrote Ziegel").setTab(CheatTab.BLOCKS);
		registerBlock("blood_brick", bloodBrick);
		registerBlock("blood_brick_slab", (new BlockSlab(Material.SOLID, "blood_brick"))
		.setHardness(2.0F).setResistance(10.0F).setStepSound(SoundType.STONE).setDisplay("Blutrote Ziegelstufe"));
		registerBlock("blood_brick_fence", (new BlockFence(Material.SOLID, "blood_brick")).setHardness(2.0F).setResistance(10.0F)
				.setStepSound(SoundType.STONE).setDisplay("Blutroter Ziegelzaun"));
		registerBlock("blood_brick_stairs", (new BlockStairs(bloodBrick.getState())).setDisplay("Blutrote Ziegeltreppe"));

		
		Block blackBrick = (new Block(Material.SOLID)).setHardness(2.0F).setResistance(10.0F).setStepSound(SoundType.STONE)
				.setDisplay("Schwarze Ziegel").setTab(CheatTab.BLOCKS);
		registerBlock("black_brick", blackBrick);
		registerBlock("black_brick_slab", (new BlockSlab(Material.SOLID, "black_brick"))
		.setHardness(2.0F).setResistance(10.0F).setStepSound(SoundType.STONE).setDisplay("Schwarze Ziegelstufe"));
		registerBlock("black_brick_stairs", (new BlockStairs(blackBrick.getState())).setDisplay("Schwarze Ziegeltreppe"));
		registerBlock("black_brick_fence", (new BlockFence(Material.SOLID, "black_brick")).setHardness(2.0F).setResistance(10.0F)
				.setStepSound(SoundType.STONE).setDisplay("Schwarzer Ziegelzaun"));
		
		Block bquartz = (new BlockQuartz(true, false)).setStepSound(SoundType.STONE).setHardness(0.8F).setDisplay("Schwarzer Quarzblock");
		registerBlock("black_quartz_block", bquartz);
		registerBlock("black_quartz_ornaments", (new BlockQuartz(true, true)).setStepSound(SoundType.STONE).setHardness(0.8F).setDisplay("Schwarzer gemeißelter Quarzblock"));
		registerBlock("black_quartz_pillar", (new BlockQuartzPillar(true)).setStepSound(SoundType.STONE).setHardness(0.8F).setDisplay("Schwarze Quarzsäule"));
		registerBlock("black_quartz_slab", (new BlockSlab(Material.SOLID, "black_quartz_block_side", "black_quartz_block_bottom", "black_quartz_top"))
		.setHardness(2.0F).setResistance(10.0F).setStepSound(SoundType.STONE).setDisplay("Schwarze Quarzstufe"));
		registerBlock("black_quartz_stairs", (new BlockStairs(bquartz.getState(),
				"black_quartz_block_bottom", "black_quartz_top"))
				.setDisplay("Schwarze Quarztreppe"));

		for(DecoType deco : DecoType.values()) {
			registerBlock(deco.name, (new Block(Material.SOLID)).setHardness(2.0F).setResistance(10.0F)
					.setStepSound(SoundType.STONE).setDisplay(deco.display).setTab(CheatTab.BLOCKS));
		}
		


		
		registerBlock("trapdoor", (new BlockTrapDoor(Material.WOOD)).setHardness(3.0F).setStepSound(SoundType.WOOD).setDisplay("Holzfalltür").setFlammable(5, 20));
		for(WoodType wood : WoodType.values()) {
			Block planks = (new Block(Material.WOOD)).setHardness(2.0F).setResistance(5.0F).setStepSound(SoundType.WOOD)
					.setDisplay(wood.getDisplay() + "holzbretter").setTab(CheatTab.WOOD).setFlammable(5, 20);
			registerBlock(wood.getName() + "_planks", planks);
			registerBlock(wood.getName() + "_stairs", (new BlockStairs(planks.getState()))
					.setDisplay(wood.getDisplay() + "holztreppe").setFlammable(5, 20));
			registerBlock(wood.getName() + "_slab", (new BlockSlab(Material.WOOD, wood.getName() + "_planks"))
					.setHardness(2.0F).setResistance(5.0F).setStepSound(SoundType.WOOD).setDisplay(wood.getDisplay() + "holzstufe").setFlammable(5, 20));
			registerBlock(wood.getName() + "_fence", (new BlockFence(Material.WOOD, wood.getName() + "_planks"))
					.setHardness(2.0F).setResistance(5.0F).setStepSound(SoundType.WOOD).setDisplay(wood.getDisplay() + "holzzaun").setFlammable(5, 20));
			registerBlock(wood.getName() + "_fence_gate", (new BlockFenceGate(wood)).setHardness(2.0F).setResistance(5.0F)
					.setStepSound(SoundType.WOOD).setDisplay(wood.getDisplay() + "holzzauntor").setFlammable(5, 20));
			registerBlock(wood.getName() + "_door", (new BlockDoor(Material.WOOD)).setHardness(3.0F).setStepSound(SoundType.WOOD)
					.setDisplay(wood.getDisplay() + "holztür").setFlammable(5, 20));
		}
		
		
		registerBlock("core", new BlockCore().setHardness(1.5F).setResistance(10.0F).setStepSound(SoundType.STONE)
				.setDisplay("Chunk-Lade-Kern"));
		registerBlock("mob_spawner", (new BlockMobSpawner()).setHardness(3.0F).setResistance(8.0F).setStepSound(SoundType.STONE).setDisplay("Mob-Spawner"));
		registerBlock("workbench", (new BlockWorkbench(3)).setHardness(2.5F).setStepSound(SoundType.WOOD).setDisplay("Werkbank"));
		registerBlock("furnace", (new BlockFurnace(false)).setHardness(3.5F).setStepSound(SoundType.STONE).setDisplay("Ofen")
				.setTab(CheatTab.TECHNOLOGY));
		registerBlock("lit_furnace", (new BlockFurnace(true)).setHardness(3.5F).setStepSound(SoundType.STONE).setLightLevel(0.875F)
				.setDisplay("Ofen (Gefeuert)").setTab(CheatTab.TECHNOLOGY));
		for(int z = 0; z < BlockAnvil.ANVILS.length; z++) {
			registerBlock("anvil" + (z == 0 ? "" : "_damaged_" + z), (new BlockAnvil(z)).setHardness(5.0F).setStepSound(SoundType.ANVIL).setResistance(2000.0F).setDisplay((z == 0 ? "" : (z == 1 ? "Leicht beschädigter " : "Stark beschädigter ")) + "Amboss"));
		}
		registerBlock("enchanting_table", (new BlockEnchantmentTable()).setHardness(5.0F).setResistance(2000.0F).setDisplay("Zaubertisch"));
		registerBlock("brewing_stand", (new BlockBrewingStand()).setHardness(0.5F).setLightLevel(0.125F).setDisplay("Braustand"));
		registerBlock("cauldron", (new BlockCauldron()).setHardness(2.0F).setDisplay("Kessel"));
		registerBlock("beacon", (new BlockBeacon()).setDisplay("Leuchtfeuer").setLightLevel(1.0F));
		registerBlock("noteblock", (new BlockNote()).setHardness(0.8F).setDisplay("Notenblock"));
		registerBlock("jukebox", (new BlockJukebox()).setHardness(2.0F).setResistance(10.0F).setStepSound(SoundType.STONE).setDisplay("Plattenspieler"));
		registerBlock("construction_table", (new BlockWorkbench(4)).setHardness(2.5F).setStepSound(SoundType.WOOD).setDisplay("Konstruktionstisch"));
		registerBlock("assembly_unit", (new BlockWorkbench(5)).setHardness(2.5F).setStepSound(SoundType.WOOD).setDisplay("Fertigungseinheit"));
		
		registerBlock("chest", (new BlockChest(0)).setHardness(2.5F).setStepSound(SoundType.WOOD).setDisplay("Truhe"));
		registerBlock("trapped_chest", (new BlockChest(1)).setHardness(2.5F).setStepSound(SoundType.WOOD).setDisplay("Redstonetruhe"));
		registerBlock("warp_chest", (new BlockWarpChest()).setHardness(22.5F).setResistance(1000.0F).setStepSound(SoundType.STONE)
				.setDisplay("Warptruhe").setLightLevel(0.5F));
		
		for(int z = 0; z < BlockTNT.TNTS.length; z++) {
			registerBlock("tnt" + (z == 0 ? "" : "_" + z), (new BlockTNT(z)).setHardness(0.0F).setStepSound(SoundType.GRASS).setDisplay("TNT" + Util.getTierSuffix(z)));
		}
		registerBlock("nuke", (new BlockNuke()).setHardness(0.0F).setStepSound(SoundType.GRASS).setDisplay("T-17"));

		registerBlock("piston", (new BlockPistonBase(false)).setDisplay("Kolben"));
		registerBlock("sticky_piston", (new BlockPistonBase(true)).setDisplay("Klebriger Kolben"));
		registerBlock("piston_head", (new BlockPistonHead()).setDisplay("Kolben"));
		registerBlock("piston_extension", new BlockPistonMoving().setDisplay("Kolben"));
		registerBlock("dispenser", (new BlockDispenser()).setHardness(3.5F).setStepSound(SoundType.STONE).setDisplay("Werfer"));
		registerBlock("dropper", (new BlockDropper()).setHardness(3.5F).setStepSound(SoundType.STONE).setDisplay("Spender"));
		registerBlock("hopper", (new BlockHopper()).setHardness(3.0F).setResistance(8.0F).setStepSound(SoundType.STONE).setDisplay("Trichter"));
		registerBlock("tian_reactor", (new BlockTianReactor()).setHardness(3.0F).setResistance(8.0F).setStepSound(SoundType.STONE).setDisplay("Tianreaktor"));
		
		registerBlock("rail", (new BlockRail()).setHardness(0.7F).setStepSound(SoundType.STONE).setDisplay("Schiene").setMiningLevel(0));
		registerBlock("golden_rail", (new BlockRailPowered()).setHardness(0.7F).setStepSound(SoundType.STONE).setDisplay("Antriebsschiene").setMiningLevel(0));
		registerBlock("detector_rail", (new BlockRailDetector()).setHardness(0.7F).setStepSound(SoundType.STONE).setDisplay("Sensorschiene").setMiningLevel(0));
		registerBlock("activator_rail", (new BlockRailPowered()).setHardness(0.7F).setStepSound(SoundType.STONE).setDisplay("Aktivierungsschiene").setMiningLevel(0));
		
		registerBlock("lever", (new BlockLever()).setHardness(0.5F).setStepSound(SoundType.WOOD).setDisplay("Hebel"));
		
		registerBlock("stone_pressure_plate", (new BlockPressurePlate(Material.SOLID, BlockPressurePlate.Sensitivity.MOBS)).setHardness(0.5F)
				.setStepSound(SoundType.STONE).setDisplay("Steindruckplatte"));
		registerBlock("wooden_pressure_plate", (new BlockPressurePlate(Material.WOOD, BlockPressurePlate.Sensitivity.EVERYTHING))
				.setHardness(0.5F).setStepSound(SoundType.WOOD).setDisplay("Holzdruckplatte"));
		registerBlock("light_weighted_pressure_plate", (new BlockPressurePlateWeighted(Material.SOLID, 15)).setHardness(0.5F)
				.setStepSound(SoundType.WOOD).setDisplay("Wägeplatte (niedrige Gewichte)"));
		registerBlock("heavy_weighted_pressure_plate", (new BlockPressurePlateWeighted(Material.SOLID, 150)).setHardness(0.5F)
				.setStepSound(SoundType.WOOD).setDisplay("Wägeplatte (hohe Gewichte)"));
		
		registerBlock("stone_button", (new BlockButton(false, 20, "stone")).setHardness(0.5F).setStepSound(SoundType.STONE).setDisplay("Knopf"));
		registerBlock("wooden_button", (new BlockButton(true, 30, "oak_planks")).setHardness(0.5F).setStepSound(SoundType.WOOD).setDisplay("Knopf"));
		registerBlock("red_button", (new BlockButton(true, 10, "red_button")).setHardness(0.5F).setStepSound(SoundType.STONE).setDisplay("Knopf"));

		registerBlock("redstone", (new BlockRedstoneWire()).setHardness(0.0F).setStepSound(SoundType.STONE).setDisplay("Redstone-Staub"));
		registerBlock("unlit_redstone_torch", (new BlockRedstoneTorch(false)).setHardness(0.0F).setStepSound(SoundType.WOOD).setDisplay("Redstone-Fackel"));
		registerBlock("redstone_torch", (new BlockRedstoneTorch(true)).setHardness(0.0F).setLightLevel(0.5F).setStepSound(SoundType.WOOD)
				.setDisplay("Redstone-Fackel").setTab(CheatTab.TECHNOLOGY));
		registerBlock("repeater", (new BlockRedstoneRepeater(false)).setHardness(0.0F).setStepSound(SoundType.WOOD).setDisplay("Redstone-Verstärker"));
		registerBlock("powered_repeater", (new BlockRedstoneRepeater(true)).setHardness(0.0F).setStepSound(SoundType.WOOD).setDisplay("Redstone-Verstärker"));
		registerBlock("comparator", (new BlockRedstoneComparator(false)).setHardness(0.0F).setStepSound(SoundType.WOOD).setDisplay("Redstone-Komparator"));
		registerBlock("powered_comparator", (new BlockRedstoneComparator(true)).setHardness(0.0F).setLightLevel(0.625F)
				.setStepSound(SoundType.WOOD).setDisplay("Redstone-Komparator"));
		registerBlock("redstone_lamp", (new BlockRedstoneLight(false)).setHardness(0.3F).setStepSound(SoundType.GLASS)
				.setDisplay("Redstone-Lampe").setTab(CheatTab.TECHNOLOGY));
		registerBlock("lit_redstone_lamp", (new BlockRedstoneLight(true)).setHardness(0.3F).setStepSound(SoundType.GLASS).setDisplay("Redstone-Lampe"));
		registerBlock("daylight_detector", new BlockDaylightDetector(false).setDisplay("Tageslichtsensor"));
		registerBlock("daylight_detector_inverted", new BlockDaylightDetector(true).setDisplay("Tageslichtsensor"));
		registerBlock("tripwire_hook", (new BlockTripWireHook()).setDisplay("Haken"));
		registerBlock("string", (new BlockTripWire()).setDisplay("Stolperdraht").setShearsEfficiency(0));

		REGISTRY.finish();

		for(Block block : REGISTRY) {
			for(State state : block.getValidStates()) {
				state.buildSaved();
			}
		}

		Log.SYSTEM.debug("%d Blöcke registriert", nextBlockId);
	}
}
