/* * 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.gui.containers; import org.apache.logging.log4j.Level; import mods.railcraft.common.blocks.detector.TileDetector; import net.minecraft.inventory.Container; 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.tracks.TileTrack; import mods.railcraft.common.blocks.tracks.TrackRouting; import mods.railcraft.common.carts.*; import mods.railcraft.common.gui.EnumGui; import mods.railcraft.common.modules.ModuleManager; import mods.railcraft.common.util.misc.Game; import net.minecraft.world.World; /** * @author CovertJaguar <http://www.railcraft.info> */ public class FactoryContainer { @SuppressWarnings("ConstantConditions") public static Container 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 ContainerItemLoader(inv, (TileLoaderItemBase) obj); case LOADER_FLUID: return new ContainerFluidLoader(inv, (TileFluidLoader) obj); case UNLOADER_FLUID: return new ContainerFluidUnloader(inv, (TileFluidUnloader) obj); case LOADER_ENERGY: return new ContainerEnergyLoader(inv, (TileEnergyLoader) obj); case UNLOADER_ENERGY: return new ContainerEnergyLoader(inv, (TileEnergyUnloader) obj); case LOADER_RF: return new ContainerLoaderRF((TileRFLoaderBase) obj); case UNLOADER_RF: return new ContainerLoaderRF((TileRFLoaderBase) obj); case DETECTOR_ITEM: return new ContainerDetectorItem(inv, (TileDetector) obj); case DETECTOR_TANK: return new ContainerDetectorTank(inv, (TileDetector) obj); case DETECTOR_SHEEP: return new ContainerDetectorSheep(inv, (TileDetector) obj); case DETECTOR_ADVANCED: return new ContainerDetectorAdvanced(inv, (TileDetector) obj); case DETECTOR_LOCOMOTIVE: return new ContainerDetectorLocomotive(inv, (TileDetector) obj); case DETECTOR_ROUTING: return new ContainerRouting(inv, (IRouter) ((TileDetector) obj).getDetector()); case CART_DISPENSER: return new ContainerDispenserCart(inv, (TileDispenserCart) obj); case TRAIN_DISPENSER: return new ContainerDispenserTrain(inv, (TileDispenserTrain) obj); case COKE_OVEN: return new ContainerCokeOven(inv, (TileCokeOven) obj); case BLAST_FURNACE: return new ContainerBlastFurnace(inv, (TileBlastFurnace) obj); case STEAN_OVEN: return new ContainerSteamOven(inv, (TileSteamOven) obj); case ROCK_CRUSHER: return new ContainerRockCrusher(inv, (TileRockCrusher) obj); case TANK: return new ContainerTank(inv, (ITankTile) obj); case ROLLING_MACHINE: return new ContainerRollingMachine(inv, (TileRollingMachine) obj); case FEED_STATION: return new ContainerFeedStation(inv, (TileFeedStation) obj); case TRADE_STATION: return new ContainerTradeStation(inv, (TileTradeStation) obj); case WORLD_ANCHOR: return new ContainerAnchor(inv, (TileAnchorWorld) obj); case ENGINE_STEAM: return new ContainerEngineSteam(inv, (TileEngineSteam) obj); case ENGINE_HOBBY: return new ContainerEngineSteamHobby(inv, (TileEngineSteamHobby) obj); case BOILER_SOLID: return new ContainerBoilerSolid(inv, (TileBoilerFireboxSolid) obj); case BOILER_LIQUID: return new ContainerBoilerFluid(inv, (TileBoilerFireboxFluid) obj); case TURBINE: return new ContainerTurbine(inv, (TileSteamTurbine) obj); case ANVIL: return new ContainerAnvil(inv, world, x, y, z, inv.player); case CART_BORE: return new ContainerBore(inv, (EntityTunnelBore) obj); case CART_ENERGY: return new ContainerCartEnergy(inv, (IIC2EnergyCart) obj); case CART_RF: return new ContainerCartRF((EntityCartRF) obj); case CART_TANK: return new ContainerCartTank(inv, (EntityCartTank) obj); case CART_CARGO: return new ContainerCartCargo(inv, (EntityCartCargo) obj); case CART_ANCHOR: return new ContainerAnchor(inv, (EntityCartAnchor) obj); case CART_WORK: return new ContainerCartWork(inv, (EntityCartWork) obj); case CART_TRACK_LAYER: return new ContainerCartTrackLayer(inv, (EntityCartTrackLayer) obj); case CART_TRACK_RELAYER: return new ContainerCartTrackRelayer(inv, (EntityCartTrackRelayer) obj); case CART_UNDERCUTTER: return new ContainerCartUndercutter(inv, (EntityCartUndercutter) obj); case LOCO_STEAM: return ContainerLocomotiveSteamSolid.make(inv, (EntityLocomotiveSteamSolid) obj); case LOCO_ELECTRIC: return ContainerLocomotiveElectric.make(inv, (EntityLocomotiveElectric) obj); case LOCO_CREATIVE: return ContainerLocomotive.make(inv, (EntityLocomotiveCreative) obj); case SWITCH_MOTOR: return new ContainerAspectAction(inv.player, (IAspectActionManager) obj); case BOX_RECEIVER: return new ContainerAspectAction(inv.player, (IAspectActionManager) obj); case BOX_RELAY: return new ContainerAspectAction(inv.player, (IAspectActionManager) obj); case ROUTING: return new ContainerRouting(inv, (IRouter) obj); case TRACK_ROUTING: return new ContainerTrackRouting(inv, (TrackRouting) ((TileTrack) obj).getTrackInstance()); default: return ModuleManager.getGuiContainer(gui, inv, obj, world, x, y, z); } } catch (ClassCastException ex) { Game.log(Level.WARN, "Error when attempting to build gui container {0}: {1}", gui, ex); } return null; } }