package com.cricketcraft.chisel;
import java.util.HashMap;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import com.cricketcraft.chisel.utils.General;
import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.common.registry.GameRegistry;
public class BlockNameConversion {
static final private HashMap<String, String> namingConversion = new HashMap<String, String>();
public static class NameConversions {
public final static int MAX = 5;
protected static String conversion(String oldname, int step) {
oldname = General.cleanTags(oldname);
String newname = null;
switch (step) {
case 0: // lookup list
return namingConversion.get(oldname);
case 1: // remove Chisel:
if (oldname.startsWith("Chisel:")) {
newname = oldname.replaceAll("(?i)" + "Chisel:", "");
}
return newname;
case 2: // rename "marbleSlab" -> "marble_slab", "redstone" ->
// "redstone_block"
newname = oldname.replaceAll("([a-z]+)([A-Z])", "$1_$2").toLowerCase();
if (newname.startsWith("block_")) {
newname = newname.replaceFirst("block_([a-z_]+)", "$1_block");
} else if (newname.startsWith("snakestone_")) {
newname = newname.replaceFirst("snakestone_([a-z_]+)", "$1_snakestone");
}
return newname;
case 3: // rename "wood-dark-oak" -> "dark_oak_planks"
newname = oldname.replaceAll("([a-z]+)([A-Z])", "$1_$2").toLowerCase().replace('-', '_');
if (newname.contains("wood_")) {
newname = newname.replaceFirst("wood_([a-z_]+)", "$1_planks");
}
return newname;
case (MAX - 1): // ALWAYS last: rename "blockYxx" -> "yxx" (e.g.
// "dirt" -> "dirt").
// This can be dangerous in cases like "carpet" (a block) ->
// "carpet" (NO block)
return oldname.replaceAll("([a-z]+)([A-Z])", "$1_$2").toLowerCase().replaceFirst("block_", "");
default:
throw new IndexOutOfBoundsException("conversion got invalid parameter step=" + step);
}
}
}
static public void init() {
namingConversion.put("blockCobble", "cobblestone");
namingConversion.put("iron", "iron_block");
namingConversion.put("gold", "gold_block");
namingConversion.put("diamond", "diamond_block");
namingConversion.put("lightstone", "glowstone");
namingConversion.put("lapis", "lapis_block");
namingConversion.put("emerald", "emerald_block");
namingConversion.put("hellrock", "netherrack");
namingConversion.put("stoneMoss", "mossy_cobblestone");
namingConversion.put("stoneBrick", "stonebrick");
namingConversion.put("fenceIron", "iron_bars");
namingConversion.put("fantasy", "fantasyblock");
namingConversion.put("carpetFloor", "carpet");
namingConversion.put("temple", "templeblock");
namingConversion.put("templeMossy", "mossy_templeblock");
namingConversion.put("factory", "factoryblock");
namingConversion.put("laboratory", "laboratoryblock");
// "LightGray" is unfortunately converted to "light_gray"
namingConversion.put("stainedGlassLightGray", "stained_glass_lightgray");
namingConversion.put("stainedGlassPaneLightGray", "stained_glass_pane_lightgray");
namingConversion.put("blockTemple", "templeblock");
namingConversion.put("stoneBrick", "stonebricksmooth");
namingConversion.put("blockTempleMossy", "mossy_templeblock");
namingConversion.put("blockFactory", "factoryblock");
namingConversion.put("blockFft", "fantasyblock");
namingConversion.put("blockCarpetFloor", "carpet");
namingConversion.put("blockLaboratory", "laboratoryblock");
}
public static Item findItem(String oldname) {
FMLLog.getLogger().trace("[Chisel 2] findItem() START " + oldname);
Item item = null;
for (int i = 0; i < NameConversions.MAX && item == null; i++) {
FMLLog.getLogger().trace("[Chisel 2] findItem() Checking for " + NameConversions.conversion(oldname, i));
item = GameRegistry.findItem(Chisel.MOD_ID, NameConversions.conversion(oldname, i));
}
return item;
}
public static Block findBlock(String oldname) {
FMLLog.getLogger().trace("[Chisel 2] findBlock() START: " + oldname);
Block block = null;
for (int i = 0; i < NameConversions.MAX && block == null; i++) {
FMLLog.getLogger().trace("[Chisel 2] findBlock() Checking for " + NameConversions.conversion(oldname, i));
block = GameRegistry.findBlock(Chisel.MOD_ID, NameConversions.conversion(oldname, i));
}
return block;
}
}