/*
* 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.client.gui;
import org.apache.logging.log4j.Level;
import mods.railcraft.common.blocks.RailcraftTileEntity;
import mods.railcraft.common.blocks.detector.TileDetector;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.player.InventoryPlayer;
import mods.railcraft.common.blocks.machine.ITankTile;
import mods.railcraft.common.blocks.machine.TileMultiBlock;
import mods.railcraft.common.blocks.machine.alpha.*;
import mods.railcraft.common.blocks.machine.beta.TileBoilerFireboxFluid;
import mods.railcraft.common.blocks.machine.beta.TileBoilerFireboxSolid;
import mods.railcraft.common.blocks.machine.beta.TileEngineSteam;
import mods.railcraft.common.blocks.machine.beta.TileEngineSteamHobby;
import mods.railcraft.common.blocks.machine.gamma.*;
import mods.railcraft.common.blocks.signals.IAspectActionManager;
import mods.railcraft.common.blocks.signals.IRouter;
import mods.railcraft.common.blocks.signals.TileBoxAnalogController;
import mods.railcraft.common.blocks.signals.TileBoxCapacitor;
import mods.railcraft.common.blocks.signals.TileBoxController;
import mods.railcraft.common.blocks.signals.TileSwitchMotor;
import mods.railcraft.common.blocks.tracks.*;
import mods.railcraft.common.carts.*;
import mods.railcraft.common.gui.EnumGui;
import mods.railcraft.common.modules.ModuleManager;
import mods.railcraft.common.plugins.forge.LocalizationPlugin;
import mods.railcraft.common.util.misc.Game;
import net.minecraft.world.World;
/**
* @author CovertJaguar <http://www.railcraft.info>
*/
public class FactoryGui {
public static GuiScreen build(EnumGui gui, InventoryPlayer inv, Object obj, World world, int x, int y, int z) {
if (gui != EnumGui.ANVIL && obj == null)
return null;
if (obj instanceof TileMultiBlock && !((TileMultiBlock) obj).isStructureValid())
return null;
try {
switch (gui) {
case LOADER_ITEM:
return new GuiLoaderItem(inv, (TileLoaderItemBase) obj);
case LOADER_FLUID:
return new GuiLoaderFluid(inv, (TileFluidLoader) obj);
case UNLOADER_FLUID:
return new GuiUnloaderFluid(inv, (TileFluidUnloader) obj);
case LOADER_ENERGY:
return new GuiLoaderEnergy(inv, (TileEnergyLoader) obj);
case UNLOADER_ENERGY:
return new GuiUnloaderEnergy(inv, (TileEnergyUnloader) obj);
case LOADER_RF:
return new GuiLoaderRF((TileRFLoader) obj);
case UNLOADER_RF:
return new GuiUnloaderRF((TileRFUnloader) obj);
case DETECTOR_ITEM:
return new GuiDetectorItem(inv, (TileDetector) obj);
case DETECTOR_TANK:
return new GuiDetectorTank(inv, (TileDetector) obj);
case DETECTOR_SHEEP:
return new GuiDetectorSheep(inv, (TileDetector) obj);
case DETECTOR_ANIMAL:
return new GuiDetectorAnimal((TileDetector) obj);
case DETECTOR_ADVANCED:
return new GuiDetectorAdvanced(inv, (TileDetector) obj);
case DETECTOR_TRAIN:
return new GuiDetectorTrain((TileDetector) obj);
case DETECTOR_VILLAGER:
return new GuiDetectorVillager((TileDetector) obj);
case DETECTOR_LOCOMOTIVE:
return new GuiDetectorLocomotive(inv, (TileDetector) obj);
case DETECTOR_ROUTING:
return new GuiRouting(inv, (RailcraftTileEntity) obj, (IRouter) ((TileDetector) obj).getDetector());
case CART_DISPENSER:
return new GuiDispenserCart(inv, (TileDispenserCart) obj);
case TRAIN_DISPENSER:
return new GuiDispenserTrain(inv, (TileDispenserTrain) obj);
case COKE_OVEN:
return new GuiCokeOven(inv, (TileCokeOven) obj);
case BLAST_FURNACE:
return new GuiBlastFurnace(inv, (TileBlastFurnace) obj);
case STEAN_OVEN:
return new GuiSteamOven(inv, (TileSteamOven) obj);
case TANK:
return new GuiTank(inv, (ITankTile) obj);
case ROCK_CRUSHER:
return new GuiRockCrusher(inv, (TileRockCrusher) obj);
case ROLLING_MACHINE:
return new GuiRollingMachine(inv, (TileRollingMachine) obj);
case FEED_STATION:
return new GuiFeedStation(inv, (TileFeedStation) obj);
case TRADE_STATION:
return new GuiTradeStation(inv, (TileTradeStation) obj);
case WORLD_ANCHOR:
return new GuiWorldAnchor(inv, (TileAnchorWorld) obj);
case ENGINE_STEAM:
return new GuiEngineSteam(inv, (TileEngineSteam) obj);
case ENGINE_HOBBY:
return new GuiEngineSteamHobby(inv, (TileEngineSteamHobby) obj);
case BOILER_SOLID:
return new GuiBoilerSolid(inv, (TileBoilerFireboxSolid) obj);
case BOILER_LIQUID:
return new GuiBoilerFluid(inv, (TileBoilerFireboxFluid) obj);
case TURBINE:
return new GuiTurbine(inv, (TileSteamTurbine) obj);
case ANVIL:
return new GuiAnvil(inv, world, x, y, z);
case ROUTING:
return new GuiRouting(inv, (RailcraftTileEntity) obj, (IRouter) obj);
case TRACK_ROUTING:
return new GuiTrackRouting(inv, (TrackRouting) ((TileTrack) obj).getTrackInstance());
case SWITCH_MOTOR:
return new GuiSwitchMotor(inv.player, (TileSwitchMotor) obj, LocalizationPlugin.translate("railcraft.gui.switch.motor.action"));
case BOX_RECEIVER:
return new GuiAspectAction(inv.player, (IAspectActionManager) obj, LocalizationPlugin.translate("railcraft.gui.box.aspect.action"));
case BOX_RELAY:
return new GuiAspectAction(inv.player, (IAspectActionManager) obj, LocalizationPlugin.translate("railcraft.gui.box.aspect.action"));
case BOX_CONTROLLER:
return new GuiBoxController((TileBoxController) obj);
case BOX_ANALOG_CONTROLLER:
return new GuiBoxAnalogController((TileBoxAnalogController) obj);
case BOX_CAPACITOR:
return new GuiBoxCapacitor((TileBoxCapacitor) obj);
case TRACK_LAUNCHER:
return new GuiTrackLauncher((TrackLauncher) ((TileTrack) obj).getTrackInstance());
case TRACK_PRIMING:
return new GuiTrackPriming((TrackPriming) ((TileTrack) obj).getTrackInstance());
case TRACK_EMBARKING:
return new GuiTrackEmbarking((TrackEmbarking) ((TileTrack) obj).getTrackInstance());
case CART_BORE:
return new GuiCartBore(inv, (EntityTunnelBore) obj);
case CART_ENERGY:
return new GuiCartEnergy(inv, (IIC2EnergyCart) obj);
case CART_RF:
return new GuiCartRF((EntityCartRF) obj);
case CART_TANK:
return new GuiCartTank(inv, (EntityCartTank) obj);
case CART_CARGO:
return new GuiCartCargo(inv, (EntityCartCargo) obj);
case CART_ANCHOR:
return new GuiCartAnchor(inv, (EntityCartAnchor) obj);
case CART_TNT_FUSE:
return new GuiCartTNTFuse((CartExplosiveBase) obj);
case CART_WORK:
return new GuiCartWork(inv, (EntityCartWork) obj);
case CART_TRACK_LAYER:
return new GuiCartTrackLayer(inv, (EntityCartTrackLayer) obj);
case CART_TRACK_RELAYER:
return new GuiCartTrackRelayer(inv, (EntityCartTrackRelayer) obj);
case CART_UNDERCUTTER:
return new GuiCartUndercutter(inv, (EntityCartUndercutter) obj);
case LOCO_STEAM:
return new GuiLocomotiveSteamSolid(inv, (EntityLocomotiveSteamSolid) obj);
case LOCO_ELECTRIC:
return new GuiLocomotiveElectric(inv, (EntityLocomotiveElectric) obj);
case LOCO_CREATIVE:
return new GuiLocomotiveCreative(inv, (EntityLocomotiveCreative) obj);
default:
return ModuleManager.getGuiScreen(gui, inv, obj, world, x, y, z);
}
} catch (ClassCastException ex) {
Game.log(Level.WARN, "Error when attempting to build gui {0}: {1}", gui, ex);
}
return null;
}
}