Java Code Examples for net.minecraft.init.Blocks#iron_block()

The following examples show how to use net.minecraft.init.Blocks#iron_block() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: BW_MetaGeneratedBlocks_CasingAdvanced_TE.java    From bartworks with MIT License 6 votes vote down vote up
@Override
public ITexture[] getTexture(Block aBlock, byte aSide) {
    if (SideReference.Side.Client) {
        Werkstoff aMaterial = Werkstoff.werkstoffHashMap.get(this.mMetaData);
        if ((aMaterial != null)) {
            TextureSet set = aMaterial.getTexSet();
            GT_RenderedTexture aIconSet = new GT_RenderedTexture(
                    PrefixTextureLinker.texMapBlocks
                            .get(WerkstoffLoader.blockCasingAdvanced)
                            .getOrDefault(set, TextureSet.SET_NONE.mTextures[OrePrefixes.block.mTextureIndex]),
                    aMaterial.getRGBA()
            );
            return new ITexture[]{new GT_CopiedBlockTexture(Blocks.iron_block, 0, 0), aIconSet};
        }
    }
    return new ITexture[]{new GT_CopiedBlockTexture(Blocks.iron_block, 0, 0), new GT_RenderedTexture(gregtech.api.enums.TextureSet.SET_NONE.mTextures[OrePrefixes.block.mTextureIndex])};
}
 
Example 2
Source File: BW_MetaGeneratedBlocks_Casing_TE.java    From bartworks with MIT License 6 votes vote down vote up
@Override
public ITexture[] getTexture(Block aBlock, byte aSide) {
    if (SideReference.Side.Client) {
        Werkstoff aMaterial = Werkstoff.werkstoffHashMap.get(this.mMetaData);
        if ((aMaterial != null)) {
            TextureSet set = aMaterial.getTexSet();
            GT_RenderedTexture aIconSet = new GT_RenderedTexture(
                    PrefixTextureLinker.texMapBlocks
                            .get(WerkstoffLoader.blockCasing)
                            .getOrDefault(set, TextureSet.SET_NONE.mTextures[OrePrefixes.block.mTextureIndex]),
                    aMaterial.getRGBA()
            );
            return new ITexture[]{new GT_CopiedBlockTexture(Blocks.iron_block, 0, 0), aIconSet};
        }
    }
    return new ITexture[]{new GT_CopiedBlockTexture(Blocks.iron_block, 0, 0), new GT_RenderedTexture(gregtech.api.enums.TextureSet.SET_NONE.mTextures[OrePrefixes.block.mTextureIndex])};
}
 
Example 3
Source File: BuildContainerCommands.java    From mobycraft with Apache License 2.0 6 votes vote down vote up
@Override
public void setContainerAppearance(BoxContainer container, boolean state) {
	Block containerBlock;
	Block prevContainerBlock;

	if (state) {
		containerBlock = Blocks.iron_block;
		prevContainerBlock = Blocks.redstone_block;

	} else {
		containerBlock = Blocks.redstone_block;
		prevContainerBlock = Blocks.iron_block;
	}

	builder.replace(container.getWorld(),
			container.getPosition().add(2, 0, 1), container.getPosition()
					.add(-2, 0, 7), prevContainerBlock, containerBlock);

	builder.replace(container.getWorld(),
			container.getPosition().add(2, 4, 1), container.getPosition()
					.add(-2, 4, 7), prevContainerBlock, containerBlock);
}
 
Example 4
Source File: RadiationHelper.java    From BigReactors with MIT License 6 votes vote down vote up
private void moderateByBlock(RadiationData data, RadiationPacket radiation, Block block, int metadata) {
	ReactorInteriorData moderatorData = null;

	if(block == Blocks.iron_block) {
		moderatorData = ReactorInterior.getBlockData("blockIron");
	}
	else if(block == Blocks.gold_block) {
		moderatorData = ReactorInterior.getBlockData("blockGold");
	}
	else if(block == Blocks.diamond_block) {
		moderatorData = ReactorInterior.getBlockData("blockDiamond");
	}
	else if(block == Blocks.emerald_block) {
		moderatorData = ReactorInterior.getBlockData("blockEmerald");
	}
	else {
		// Check the ore dictionary.
		moderatorData = ReactorInterior.getBlockData(ItemHelper.oreProxy.getOreName(new ItemStack(block, 1, metadata)));
	}
	
	if(moderatorData == null) {
		moderatorData = airData;
	}

	applyModerationFactors(data, radiation, moderatorData);
}
 
Example 5
Source File: ComponentMining.java    From Artifacts with MIT License 6 votes vote down vote up
@Override
public boolean canHarvestBlock(Block block, ItemStack itemStack) {
	ToolMaterial toolMaterial = ToolMaterial.values()[itemStack.stackTagCompound.getInteger("material")];
	
	if(toolMaterial == toolMaterial.WOOD) {
		return Items.wooden_pickaxe.func_150897_b/*canHarvestBlock*/(block);
	}
	else if(toolMaterial == toolMaterial.STONE) {
		return Items.stone_pickaxe.func_150897_b(block);
	}
	else if(toolMaterial == ToolMaterial.EMERALD) {
		return Items.diamond_pickaxe.func_150897_b(block);
	}
	else if(toolMaterial == ToolMaterial.IRON) {
		return Items.iron_pickaxe.func_150897_b(block);
	}
	else if(toolMaterial == ToolMaterial.GOLD) {
		return Items.golden_pickaxe.func_150897_b(block);
	}
	return block == Blocks.obsidian ? toolMaterial.getHarvestLevel() == 3 : (block != Blocks.diamond_block && block != Blocks.diamond_ore ? (block != Blocks.emerald_ore && block != Blocks.emerald_block ? (block != Blocks.gold_block && block != Blocks.gold_ore ? (block != Blocks.iron_block && block != Blocks.iron_ore ? (block != Blocks.lapis_block && block != Blocks.lapis_ore ? (block != Blocks.redstone_ore && block != Blocks.lit_redstone_ore ? (block.getMaterial() == Material.rock ? true : (block.getMaterial() == Material.iron ? true : block.getMaterial() == Material.anvil)) : toolMaterial.getHarvestLevel() >= 2) : toolMaterial.getHarvestLevel() >= 1) : toolMaterial.getHarvestLevel() >= 1) : toolMaterial.getHarvestLevel() >= 2) : toolMaterial.getHarvestLevel() >= 2) : toolMaterial.getHarvestLevel() >= 2);
}
 
Example 6
Source File: BW_MetaGenerated_WerkstoffBlock_TE.java    From bartworks with MIT License 5 votes vote down vote up
@Override
public ITexture[] getTexture(Block aBlock, byte aSide) {
    if (SideReference.Side.Client) {
        Werkstoff aMaterial = Werkstoff.werkstoffHashMap.get(this.mMetaData);
        if ((aMaterial != null)) {
            TextureSet set = aMaterial.getTexSet();
            GT_RenderedTexture aIconSet = new GT_RenderedTexture(
                    set.mTextures[PrefixTextureLinker.blockTexMap.getOrDefault(set, OrePrefixes.block.mTextureIndex)], aMaterial.getRGBA()
            );
            return new ITexture[]{new GT_CopiedBlockTexture(Blocks.iron_block, 0, 0), aIconSet};
        }
    }
    return new ITexture[]{new GT_CopiedBlockTexture(Blocks.iron_block, 0, 0), new GT_RenderedTexture(gregtech.api.enums.TextureSet.SET_NONE.mTextures[OrePrefixes.block.mTextureIndex])};
}
 
Example 7
Source File: ContainerLifecycleCommands.java    From mobycraft with Apache License 2.0 5 votes vote down vote up
public void switchState(StructureBuilder builder, String containerID) {
		listCommands.refreshContainerIDMap();

		// If there is no container with the ID, return
		if (listCommands.getBoxContainerWithID(containerID) == null) {
			return;
		}

		// New BoxContainer variable called boxContainer to store the container
		BoxContainer boxContainer = listCommands.getBoxContainerWithID(containerID);

		boxContainer.setState(!boxContainer.getState());

		Block containerBlock;
		Block prevContainerBlock;

		// If the container is now on (previously off):
		if (boxContainer.getState()) {
			containerBlock = Blocks.iron_block;
			prevContainerBlock = Blocks.redstone_block;
			sendConfirmMessage("Not yet implemented");
//			getDockerClient().startContainerCmd(boxContainer.getID()).exec();
		}
		// Otherwise, if the container is now off (previously on):
		else {
			containerBlock = Blocks.redstone_block;
			prevContainerBlock = Blocks.iron_block;
			sendConfirmMessage("Not yet implemented");
//			getDockerClient().stopContainerCmd(boxContainer.getID()).exec();
		}

		builder.replace(boxContainer.getWorld(), boxContainer.getPosition()
				.add(2, 0, 1), boxContainer.getPosition().add(-2, 0, 7),
				prevContainerBlock, containerBlock);

		builder.replace(boxContainer.getWorld(), boxContainer.getPosition()
				.add(2, 4, 1), boxContainer.getPosition().add(-2, 4, 7),
				prevContainerBlock, containerBlock);
	}
 
Example 8
Source File: ContainerLifecycleCommands.java    From mobycraft with Apache License 2.0 5 votes vote down vote up
public void switchState(StructureBuilder builder, String containerID) {
	listCommands.refreshContainerIDMap();

	// If there is no container with the ID, return
	if (listCommands.getBoxContainerWithID(containerID) == null) {
		return;
	}

	// New BoxContainer variable called boxContainer to store the container
	BoxContainer boxContainer = listCommands
			.getBoxContainerWithID(containerID);

	boxContainer.setState(!boxContainer.getState());

	Block containerBlock;
	Block prevContainerBlock;

	// If the container is now on (previously off):
	if (boxContainer.getState()) {
		containerBlock = Blocks.iron_block;
		prevContainerBlock = Blocks.redstone_block;
		mobycraftDockerClient.getDockerClient()
				.startContainerCmd(boxContainer.getID()).exec();
	}
	// Otherwise, if the container is now off (previously on):
	else {
		containerBlock = Blocks.redstone_block;
		prevContainerBlock = Blocks.iron_block;
		mobycraftDockerClient.getDockerClient()
				.stopContainerCmd(boxContainer.getID()).exec();
	}

	builder.replace(boxContainer.getWorld(), boxContainer.getPosition()
			.add(2, 0, 1), boxContainer.getPosition().add(-2, 0, 7),
			prevContainerBlock, containerBlock);

	builder.replace(boxContainer.getWorld(), boxContainer.getPosition()
			.add(2, 4, 1), boxContainer.getPosition().add(-2, 4, 7),
			prevContainerBlock, containerBlock);
}
 
Example 9
Source File: ContainerLifecycleCommands.java    From mobycraft with Apache License 2.0 5 votes vote down vote up
public void switchState(StructureBuilder builder, String containerID) {
	listCommands.refreshContainerIDMap();

	// If there is no container with the ID, return
	if (listCommands.getBoxContainerWithID(containerID) == null) {
		return;
	}

	// New BoxContainer variable called boxContainer to store the container
	BoxContainer boxContainer = listCommands.getBoxContainerWithID(containerID);

	boxContainer.setState(!boxContainer.getState());

	Block containerBlock;
	Block prevContainerBlock;

	// If the container is now on (previously off):
	if (boxContainer.getState()) {
		containerBlock = Blocks.iron_block;
		prevContainerBlock = Blocks.redstone_block;
		sendConfirmMessage("Can't restart terminated containers");
	}
	// Otherwise, if the container is now off (previously on):
	else {
		containerBlock = Blocks.redstone_block;
		prevContainerBlock = Blocks.iron_block;
		terminateContainer(boxContainer.getID());
	}

	builder.replace(boxContainer.getWorld(), boxContainer.getPosition()
			.add(2, 0, 1), boxContainer.getPosition().add(-2, 0, 7),
			prevContainerBlock, containerBlock);

	builder.replace(boxContainer.getWorld(), boxContainer.getPosition()
			.add(2, 4, 1), boxContainer.getPosition().add(-2, 4, 7),
			prevContainerBlock, containerBlock);
}
 
Example 10
Source File: TileEntityTreeFarm.java    From AdvancedMod with GNU General Public License v3.0 5 votes vote down vote up
private void checkMultiblock(){
    checkingX++;
    if(checkingX > 1) {
        checkingX = -1;
        checkingY++;
        if(checkingY > 1) {
            checkingY = -1;
            checkingZ++;
            if(checkingZ > 1) {
                checkingZ = -1;
                formed = !foundInvalidBlock && inventoriesFound == 1;
                foundInvalidBlock = false;
                inventoriesFound = 0;
            }
        }
    }

    if(checkingX == 0 && checkingY == 0 && checkingZ == 0) return;
    Block block = worldObj.getBlock(xCoord + checkingX, yCoord + checkingY, zCoord + checkingZ);

    if(checkingX == 0 && checkingZ == 0 && checkingY == 1) {
        if(block != Blocks.dirt && block != Blocks.grass) {
            foundInvalidBlock = true;
        }
    } else if(checkingY == 1 && checkingX != 0 ^ checkingZ != 0) {
        TileEntity te = worldObj.getTileEntity(xCoord + checkingX, yCoord + checkingY, zCoord + checkingZ);
        if(te instanceof IInventory) {
            inventoriesFound++;
            inventory = (IInventory)te;
        } else if(block != Blocks.iron_block) {
            foundInvalidBlock = true;
        }
    } else if(block != Blocks.iron_block) {
        foundInvalidBlock = true;
    }
}
 
Example 11
Source File: TileEntityReactorFuelRod.java    From BigReactors with MIT License 5 votes vote down vote up
private float getConductivityFromBlock(Block block, int metadata) {
	ReactorInteriorData interiorData = null;
	
	if(block == Blocks.iron_block) {
		interiorData = ReactorInterior.getBlockData("blockIron");
	}
	else if(block == Blocks.gold_block) {
		interiorData = ReactorInterior.getBlockData("blockGold");
	}
	else if(block == Blocks.diamond_block) {
		interiorData = ReactorInterior.getBlockData("blockDiamond");
	}
	else if(block == Blocks.emerald_block) {
		interiorData = ReactorInterior.getBlockData("blockEmerald");
	}
	else {
		interiorData = ReactorInterior.getBlockData(ItemHelper.oreProxy.getOreName(new ItemStack(block, 1, metadata)));

		if(interiorData == null && block instanceof IFluidBlock) {
			Fluid fluid = ((IFluidBlock)block).getFluid();
			if(fluid != null) {
				interiorData = ReactorInterior.getFluidData(fluid.getName());
			}
		}
	}
	
	if(interiorData == null) {
		interiorData = RadiationHelper.airData;
	}
	
	return interiorData.heatConductivity;
}
 
Example 12
Source File: MultiblockTurbine.java    From BigReactors with MIT License 5 votes vote down vote up
private CoilPartData getCoilPartData(int x, int y, int z, Block block, int metadata) {
	// Allow vanilla iron and gold blocks
	if(block == Blocks.iron_block) { return TurbineCoil.getBlockData("blockIron"); }
	if(block == Blocks.gold_block) { return TurbineCoil.getBlockData("blockGold"); }
	
	if(block == BigReactors.blockMetal && metadata == BlockBRMetal.METADATA_LUDICRITE) { return TurbineCoil.getBlockData("blockLudicrite"); }
	
	// Check the oredict to see if it's copper, or a funky kind of gold/iron block
	String oreName = ItemHelper.oreProxy.getOreName(new ItemStack(block, 1, metadata));
	return TurbineCoil.getBlockData(oreName);
}
 
Example 13
Source File: BlockCarvablePumpkin.java    From Chisel-2 with GNU General Public License v2.0 4 votes vote down vote up
@Override
public void onBlockAdded(World world, int x, int y, int z){
    if(world.getBlock(x, y - 1, z) == Blocks.snow && world.getBlock(x, y - 2, z) == Blocks.snow){
        if(!world.isRemote){
            //Let's grab the pumpkin before we start
            ItemStack pumpkin = new ItemStack(world.getBlock(x, y, z), world.getBlockMetadata(x, y, z));

            world.setBlock(x, y, z, Blocks.air, 0, 2);
            world.setBlock(x, y - 1, z, Blocks.air, 0, 2);
            world.setBlock(x, y - 2, z, Blocks.air, 0, 2);
            EntityChiselSnowman snowman = new EntityChiselSnowman(world);
            snowman.setCurrentItemOrArmor(2, pumpkin);
            snowman.setLocationAndAngles((double) x + 0.5D, (double) y - 1.95D, (double) z + 0.5D, 0.0F, 0.0F);
            world.spawnEntityInWorld(snowman);
            world.notifyBlockChange(x, y, z, Blocks.air);
            world.notifyBlockChange(x, y - 1, z, Blocks.air);
            world.notifyBlockChange(x, y - 2, z, Blocks.air);
        }

        //Spawn some lovely particles
        for(int c = 0; c < 120; ++c){
            world.spawnParticle("snowshovel", (double)x + world.rand.nextDouble(), (double) (y - 2) + world.rand.nextDouble() * 2.5D, (double) z + world.rand.nextDouble(), 0.0D, 0.0D, 0.0D);
        }
    } else if(world.getBlock(x, y - 1, z) == Blocks.iron_block || world.getBlock(x, y - 2, z) == Blocks.iron_block){
        boolean flag = world.getBlock(x - 1, y - 1, z) == Blocks.iron_block && world.getBlock(x + 1, y - 1, z) == Blocks.iron_block;
        boolean flag1 = world.getBlock(x, y - 1, z - 1) == Blocks.iron_block && world.getBlock(x, y - 1, z + 1) == Blocks.iron_block;

        if(flag || flag1){
            world.setBlock(x, y, z, Blocks.air, 0, 2);
            world.setBlock(x, y - 1, z, Blocks.air, 0, 2);
            world.setBlock(x, y - 2, z, Blocks.air, 0, 2);

            if(flag){
                world.setBlock(x - 1, y - 1, z, Blocks.air, 0, 2);
                world.setBlock(x + 1, y - 1, z, Blocks.air, 0, 2);
            } else {
                world.setBlock(x, y - 1, z - 1, Blocks.air, 0, 2);
                world.setBlock(x, y - 1, z + 1, Blocks.air, 0, 2);
            }

            EntityIronGolem ironGolem = new EntityIronGolem(world);
            ironGolem.setPlayerCreated(true);
            ironGolem.setLocationAndAngles((double) x + 0.5D, (double) y - 1.95D, (double) z + 0.5D, 0.0F, 0.0F);
            world.spawnEntityInWorld(ironGolem);

            world.notifyBlockChange(x, y, z, Blocks.air);
            world.notifyBlockChange(x, y - 1, z, Blocks.air);
            world.notifyBlockChange(x, y - 2, z, Blocks.air);

            if(flag){
                world.notifyBlockChange(x - 1, y - 1, z, Blocks.air);
                world.notifyBlockChange(x + 1, y - 1, z, Blocks.air);
            } else {
                world.notifyBlockChange(x, y - 1, z - 1, Blocks.air);
                world.notifyBlockChange(x, y - 1, z + 1, Blocks.air);
            }
        }
    }
}
 
Example 14
Source File: ArchimedesConfig.java    From archimedes-ships with MIT License 4 votes vote down vote up
public void loadAndSave()
{
	Block[] defaultBlockBlacklist = { (Blocks.dirt), (Blocks.grass), (Blocks.sand), (Blocks.gravel), (Blocks.clay), (Blocks.ice), (Blocks.water), (Blocks.flowing_water), (Blocks.flowing_lava), (Blocks.lava), (Blocks.snow), Blocks.snow_layer, (Blocks.waterlily), (Blocks.netherrack), (Blocks.soul_sand), Blocks.tallgrass };
	Block[] defaultBlocksWhitelist = { Blocks.acacia_stairs, Blocks.activator_rail, Blocks.anvil, Blocks.bed, Blocks.birch_stairs, Blocks.bookshelf, Blocks.brewing_stand, Blocks.brick_block, Blocks.brick_stairs, Blocks.cactus, Blocks.cake, Blocks.carpet, Blocks.coal_block, Blocks.cobblestone, Blocks.cobblestone_wall, Blocks.command_block, Blocks.crafting_table, Blocks.dark_oak_stairs, Blocks.detector_rail, Blocks.diamond_block, Blocks.dispenser, Blocks.dropper, Blocks.daylight_detector, Blocks.double_stone_slab, Blocks.double_wooden_slab, Blocks.emerald_block, Blocks.enchanting_table, Blocks.end_stone, Blocks.ender_chest, Blocks.fence, Blocks.fence_gate, Blocks.flower_pot, Blocks.furnace, Blocks.fire, Blocks.glass, Blocks.glass_pane, Blocks.glowstone, Blocks.gold_block, Blocks.golden_rail, Blocks.hardened_clay, Blocks.hay_block, Blocks.heavy_weighted_pressure_plate, Blocks.hopper, Blocks.iron_bars, Blocks.iron_block, Blocks.iron_door, Blocks.jukebox, Blocks.jungle_stairs, Blocks.ladder, Blocks.lapis_block, Blocks.lever, Blocks.light_weighted_pressure_plate, Blocks.lit_furnace, Blocks.lit_pumpkin, Blocks.lit_redstone_lamp, Blocks.log, Blocks.log2, Blocks.melon_block, Blocks.mob_spawner, Blocks.monster_egg, Blocks.mossy_cobblestone, Blocks.nether_brick, Blocks.nether_brick_fence, Blocks.nether_brick_stairs, Blocks.noteblock, Blocks.oak_stairs, Blocks.obsidian, Blocks.planks, Blocks.pumpkin, Blocks.piston, Blocks.piston_extension, Blocks.piston_head, Blocks.powered_comparator, Blocks.powered_repeater, Blocks.quartz_block, Blocks.quartz_stairs, Blocks.rail, Blocks.redstone_block, Blocks.redstone_torch, Blocks.redstone_wire, Blocks.sandstone, Blocks.sandstone_stairs, Blocks.skull, Blocks.sponge, Blocks.spruce_stairs, Blocks.stained_hardened_clay, Blocks.standing_sign, Blocks.stone_brick_stairs, Blocks.stone_button, Blocks.stone_pressure_plate, Blocks.stone_stairs, Blocks.stonebrick, Blocks.stained_glass, Blocks.stained_glass_pane, Blocks.sticky_piston, Blocks.stone_slab, Blocks.tnt, Blocks.torch, Blocks.trapdoor, Blocks.trapped_chest, Blocks.tripwire, Blocks.tripwire_hook, Blocks.unlit_redstone_torch, Blocks.unpowered_comparator, Blocks.unpowered_repeater, Blocks.wall_sign, Blocks.web, Blocks.wooden_button, Blocks.wooden_door, Blocks.wooden_pressure_plate, Blocks.wool, Blocks.wooden_slab };
	Block[] defaultOverwritableBlocks = { Blocks.tallgrass, Blocks.waterlily };
	String[] defaultMaterialDensities = { "\"minecraft:air=0.0\"", "\"minecraft:wool=0.1\"" };
	String[] defaultBlockDensities = { "\"ArchimedesShips:floater=0.04\"", "\"ArchimedesShips:balloon=0.02\"" };
	
	String[] blockblacklistnames = new String[defaultBlockBlacklist.length];
	for (int i = 0; i < defaultBlockBlacklist.length; i++)
	{
		blockblacklistnames[i] = Block.blockRegistry.getNameForObject(defaultBlockBlacklist[i]);
	}
	
	String[] blockwhitelistnames = new String[6 + defaultBlocksWhitelist.length];
	for (int i = 0; i < blockwhitelistnames.length - 6; i++)
	{
		blockwhitelistnames[i] = Block.blockRegistry.getNameForObject(defaultBlocksWhitelist[i]);
	}
	blockwhitelistnames[blockwhitelistnames.length - 6] = "ArchimedesShips:marker";
	blockwhitelistnames[blockwhitelistnames.length - 5] = "ArchimedesShips:floater";
	blockwhitelistnames[blockwhitelistnames.length - 4] = "ArchimedesShips:balloon";
	blockwhitelistnames[blockwhitelistnames.length - 3] = "ArchimedesShips:gauge";
	blockwhitelistnames[blockwhitelistnames.length - 2] = "ArchimedesShips:seat";
	blockwhitelistnames[blockwhitelistnames.length - 1] = "ArchimedesShips:engine";
	
	String[] overwritableblocksnames = new String[defaultOverwritableBlocks.length];
	for (int i = 0; i < defaultOverwritableBlocks.length; i++)
	{
		overwritableblocksnames[i] = Block.blockRegistry.getNameForObject(defaultOverwritableBlocks[i]);
	}
	
	config.load();
	
	shipEntitySyncRate = config.get("settings", "sync_rate", 20, "The amount of ticks between a server-client synchronization. Higher numbers reduce network traffic. Lower numbers increase multiplayer experience. 20 ticks = 1 second").getInt();
	enableAirShips = config.get("settings", "enable_air_ships", true, "Enable or disable air ships.").getBoolean(true);
	useNewAlgorithm = config.get("settings", "use_iterative_assemble_algorithm", false, "New assemble algorithm implemented in v1.6.2. Allows for larger ships but is a heavier load for CPU.").getBoolean(false);
	bankingMultiplier = (float) config.get("settings", "banking_multiplier", 3d, "A multiplier for how much ships bank while making turns. Set a positive value for passive banking or a negative value for active banking. 0 disables banking.").getDouble(3d);
	
	shipControlType = config.get("control", "control_type", CONTROL_TYPE_ARCHIMEDES, "Set to 0 to use vanilla boat controls, set to 1 to use the new Archimedes controls.").getInt();
	turnSpeed = (float) config.get("control", "turn_speed", 1D, "A multiplier of the ship's turn speed.").getDouble(1D);
	speedLimit = (float) config.get("control", "speed_limit", 30D, "The maximum velocity a ship can have, in blocks per second. This does not affect acceleration.").getDouble(30D);
	speedLimit /= 20F;
	disassembleOnDismount = config.get("control", "decompile_on_dismount", false).getBoolean(false);
	
	maxShipChunkBlocks = config.get("mobile_chunk", "max_chunk_blocks", 2048, "The maximum amount of blocks that a mobile ship chunk may contain.").getInt();
	//maxShipChunkBlocks = Math.min(maxShipChunkBlocks, 3400);
	flyBalloonRatio = (float) config.get("mobile_chunk", "airship_balloon_ratio", 0.4D, "The part of the total amount of blocks that should be balloon blocks in order to make an airship.").getDouble(0.4D);
	connectDiagonalBlocks1 = config.get("mobile_chunk", "connect_diagonal_blocks_1", false, "Blocks connected diagonally on one axis will also be added to the ship if this value is set to 'true'.").getBoolean(false);
	useWhitelist = config.get("mobile_chunk", "use_whitelist", false, "Switch this property to select the block restriction list to use. 'true' for the 'allowed_blocks' whitelist, 'false' for the 'forbidden_blocks' blacklist.").getBoolean(false);
	String[] forbiddenblocks = config.get("mobile_chunk", "forbidden_blocks", blockblacklistnames, "A list of blocks that will not be added to a ship.").getStringList();
	String[] allowedblocks = config.get("mobile_chunk", "allowed_blocks", blockwhitelistnames, "A list of blocks that are allowed on a ship.").getStringList();
	String[] overwritableblocks = config.get("mobile_chunk", "overwritable_blocks", overwritableblocksnames, "A list of blocks that may be overwritten when decompiling a ship.").getStringList();
	Collections.addAll(blockBlacklist, forbiddenblocks);
	Collections.addAll(blockWhitelist, allowedblocks);
	Collections.addAll(overwritableBlocks, overwritableblocks);
	
	loadedBlockDensities = config.get("mobile_chunk", "block_densities", defaultBlockDensities, "A list of pairs of a block with a density value. This list overrides the 'material_densities' list.").getStringList();
	loadedMaterialDensities = config.get("mobile_chunk", "material_densities", defaultMaterialDensities, "A list of pairs of a material with a density value. The first value is the name of a block. All blocks with the same material will get this density value, unless overridden.").getStringList();
	
	if (FMLCommonHandler.instance().getSide().isClient())
	{
		loadKeybindings();
	}
	
	config.save();
}