/*
* 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.aesthetics.wall;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import mods.railcraft.common.blocks.aesthetics.brick.BlockBrick;
import mods.railcraft.common.blocks.aesthetics.brick.EnumBrick;
import mods.railcraft.common.blocks.aesthetics.cube.BlockCube;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import mods.railcraft.common.blocks.aesthetics.cube.EnumCube;
import mods.railcraft.common.core.RailcraftConfig;
import mods.railcraft.common.modules.ModuleManager;
import mods.railcraft.common.modules.ModuleManager.Module;
import mods.railcraft.common.plugins.forge.CraftingPlugin;
import net.minecraft.entity.Entity;
import net.minecraft.init.Blocks;
import net.minecraft.world.World;
/**
*
* @author CovertJaguar <http://www.railcraft.info>
*/
public enum EnumWallAlpha implements WallInfo {
INFERNAL_BRICK,
SANDY_BRICK,
CONCRETE,
SNOW,
ICE,
STONE_BRICK,
STONE_BRICK_MOSSY,
STONE_BRICK_CRACKED,
STONE_BRICK_CHISELED,
NETHER_BRICK,
BRICK,
SANDSTONE,
SANDSTONE_CHISELED,
SANDSTONE_SMOOTH,
OBSIDIAN,
FROST_BOUND_BRICK;
public static final EnumWallAlpha[] VALUES = values();
private static final List<EnumWallAlpha> creativeList = new ArrayList<EnumWallAlpha>();
private Block source;
private int sourceMeta = 0;
public static void initialize() {
INFERNAL_BRICK.source = EnumBrick.INFERNAL.getBlock();
SANDY_BRICK.source = EnumBrick.SANDY.getBlock();
FROST_BOUND_BRICK.source = EnumBrick.FROSTBOUND.getBlock();
CONCRETE.source = BlockCube.getBlock();
CONCRETE.sourceMeta = EnumCube.CONCRETE_BLOCK.ordinal();
SNOW.source = Blocks.snow;
ICE.source = Blocks.ice;
STONE_BRICK.source = Blocks.stonebrick;
STONE_BRICK.sourceMeta = 0;
STONE_BRICK_MOSSY.source = Blocks.stonebrick;
STONE_BRICK_MOSSY.sourceMeta = 1;
STONE_BRICK_CRACKED.source = Blocks.stonebrick;
STONE_BRICK_CRACKED.sourceMeta = 2;
STONE_BRICK_CHISELED.source = Blocks.stonebrick;
STONE_BRICK_CHISELED.sourceMeta = 3;
NETHER_BRICK.source = Blocks.nether_brick;
BRICK.source = Blocks.brick_block;
SANDSTONE.source = Blocks.sandstone;
SANDSTONE.sourceMeta = 0;
SANDSTONE_CHISELED.source = Blocks.sandstone;
SANDSTONE_CHISELED.sourceMeta = 1;
SANDSTONE_SMOOTH.source = Blocks.sandstone;
SANDSTONE_SMOOTH.sourceMeta = 2;
OBSIDIAN.source = Blocks.obsidian;
// QUARTZ.source = Block.blockNetherQuartz;
for (EnumWallAlpha wall : VALUES) {
if (wall.isEnabled() && wall.source != null)
if (wall == NETHER_BRICK)
CraftingPlugin.addShapedRecipe(wall.getItem(5), "S S", "SSS", 'S', wall.getSourceItem());
else
CraftingPlugin.addShapedRecipe(wall.getItem(6), "SSS", "SSS", 'S', wall.getSourceItem());
}
creativeList.addAll(Arrays.asList(VALUES));
}
public static WallInfo fromMeta(int id) {
if (id < 0 || id >= VALUES.length)
return VALUES[0];
return VALUES[id];
}
public static List<EnumWallAlpha> getCreativeList() {
return creativeList;
}
@Override
public Block getSource() {
return source;
}
@Override
public int getSourceMeta() {
return sourceMeta;
}
@Override
public ItemStack getSourceItem() {
if (source == null) return null;
return new ItemStack(source, 1, sourceMeta);
}
@Override
public Block getBlock() {
return BlockRailcraftWall.getBlockAlpha();
}
@Override
public ItemStack getItem() {
return getItem(1);
}
@Override
public ItemStack getItem(int qty) {
Block block = getBlock();
if (block == null) return null;
return new ItemStack(block, qty, ordinal());
}
@Override
public String getTag() {
return "tile.railcraft.wall." + name().replace("_", ".").toLowerCase(Locale.ENGLISH);
}
@Override
public boolean isEnabled() {
return ModuleManager.isModuleLoaded(Module.STRUCTURES) && RailcraftConfig.isSubBlockEnabled(getTag()) && getBlock() != null;
}
@Override
public float getBlockHardness(World world, int x, int y, int z) {
switch (this) {
case CONCRETE:
return EnumCube.CONCRETE_BLOCK.getHardness();
default:
Block block = getSource();
if (block == null)
return Blocks.brick_block.getBlockHardness(world, x, y, z);
return block.getBlockHardness(world, x, y, z);
}
}
@Override
public float getExplosionResistance(Entity entity) {
switch (this) {
case CONCRETE:
return EnumCube.CONCRETE_BLOCK.getResistance() * 3f / 5f;
default:
Block block = getSource();
if (block == null)
return Blocks.brick_block.getExplosionResistance(entity);
return block.getExplosionResistance(entity);
}
}
}