/* * 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.signals; import java.util.ArrayList; import java.util.List; import mods.railcraft.client.render.IIconProvider; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import mods.railcraft.common.blocks.RailcraftBlocks; import mods.railcraft.common.core.RailcraftConfig; import mods.railcraft.common.modules.ModuleManager; import mods.railcraft.common.modules.ModuleManager.Module; import net.minecraft.block.Block; public enum EnumSignal implements IIconProvider, ISignalTileDefinition { // Name (module, hardness, needsSupport, tag, tile) BOX_INTERLOCK(Module.SIGNALS, 3, true, "box.interlock", TileBoxInterlock.class), DUAL_HEAD_BLOCK_SIGNAL(Module.SIGNALS, 8, false, "block.signal.dual", TileSignalDualHeadBlockSignal.class), SWITCH_MOTOR(Module.SIGNALS, 8, true, "switch.motor", TileSwitchMotor.class), BLOCK_SIGNAL(Module.SIGNALS, 8, false, "block.signal", TileSignalBlockSignal.class), SWITCH_LEVER(Module.SIGNALS, 8, true, "switch.lever", TileSwitchLever.class), SWITCH_ROUTING(Module.ROUTING, 8, true, "switch.routing", TileSwitchRouting.class), BOX_SEQUENCER(Module.SIGNALS, 3, true, "box.sequencer", TileBoxSequencer.class), BOX_CAPACITOR(Module.SIGNALS, 3, true, "box.capacitor", TileBoxCapacitor.class), BOX_RECEIVER(Module.SIGNALS, 3, true, "box.receiver", TileBoxReceiver.class), BOX_CONTROLLER(Module.SIGNALS, 3, true, "box.controller", TileBoxController.class), BOX_ANALOG_CONTROLLER(Module.SIGNALS, 3, true, "box.analog", TileBoxAnalogController.class), DISTANT_SIGNAL(Module.SIGNALS, 8, false, "distant", TileSignalDistantSignal.class), DUAL_HEAD_DISTANT_SIGNAL(Module.SIGNALS, 8, false, "distant.dual", TileSignalDualHeadDistantSignal.class), BOX_BLOCK_RELAY(Module.SIGNALS, 3, true, "box.block.relay", TileBoxBlockRelay.class),; private final Module module; private final float hardness; private final boolean needsSupport; private final String tag; private final Class<? extends TileSignalFoundation> tile; private IIcon icon; private static final List<EnumSignal> creativeList = new ArrayList<EnumSignal>(); public static final EnumSignal[] VALUES = values(); static { creativeList.add(SWITCH_LEVER); creativeList.add(SWITCH_MOTOR); creativeList.add(SWITCH_ROUTING); creativeList.add(BLOCK_SIGNAL); creativeList.add(DISTANT_SIGNAL); creativeList.add(DUAL_HEAD_BLOCK_SIGNAL); creativeList.add(DUAL_HEAD_DISTANT_SIGNAL); creativeList.add(BOX_BLOCK_RELAY); creativeList.add(BOX_RECEIVER); creativeList.add(BOX_CONTROLLER); creativeList.add(BOX_ANALOG_CONTROLLER); creativeList.add(BOX_CAPACITOR); creativeList.add(BOX_SEQUENCER); creativeList.add(BOX_INTERLOCK); } private EnumSignal(Module module, float hardness, boolean needsSupport, String tag, Class<? extends TileSignalFoundation> tile) { this.module = module; this.hardness = hardness; this.needsSupport = needsSupport; this.tile = tile; this.tag = tag; } public ItemStack getItem() { return getItem(1); } public ItemStack getItem(int qty) { return new ItemStack(RailcraftBlocks.getBlockSignal(), qty, ordinal()); } @Override public String getTag() { return "tile.railcraft.signal." + tag; } public Module getModule() { return module; } @Override public Class<? extends TileSignalFoundation> getTileClass() { return tile; } public TileSignalFoundation getBlockEntity() { if (tile == null) return null; try { return tile.newInstance(); } catch (Exception ex) { } return null; } @Override public float getHardness() { return hardness; } public void setIcon(IIcon icon) { this.icon = icon; } @Override public IIcon getIcon() { return icon; } public static EnumSignal fromId(int id) { if (id < 0 || id >= VALUES.length) return SWITCH_LEVER; return VALUES[id]; } public static List<EnumSignal> getCreativeList() { return creativeList; } @Override public boolean needsSupport() { return needsSupport; } @Override public boolean isEnabled() { if (module == null) return false; return ModuleManager.isModuleLoaded(getModule()) && getBlock() != null && RailcraftConfig.isSubBlockEnabled(getTag()); } @Override public Block getBlock() { return RailcraftBlocks.getBlockSignal(); } @Override public int getMeta() { return ordinal(); } }