resonant-induction/archive/java/resonantinduction/old/transport/ResonantInductionTransport.java
2014-01-11 17:44:07 +08:00

379 lines
19 KiB
Java

package resonantinduction.old.transport;
import java.io.File;
import java.util.Arrays;
import java.util.logging.Logger;
import net.minecraft.block.Block;
import net.minecraft.block.BlockDispenser;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.Configuration;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.oredict.OreDictionary;
import org.modstats.Modstats;
import resonantinduction.archaic.blocks.BlockColorGlass;
import resonantinduction.archaic.blocks.BlockColorGlowGlass;
import resonantinduction.archaic.blocks.BlockColorSand;
import resonantinduction.archaic.blocks.BlockTurntable;
import resonantinduction.archaic.blocks.ItemBlockColored;
import resonantinduction.core.ResonantInductionTabs;
import resonantinduction.core.debug.BlockDebug;
import resonantinduction.core.network.PacketIDTile;
import resonantinduction.core.resource.BlockGasOre;
import resonantinduction.core.resource.BlockOre;
import resonantinduction.core.resource.BlockOre.OreData;
import resonantinduction.core.resource.GasOreGenerator;
import resonantinduction.core.resource.item.ItemBlockOre;
import resonantinduction.core.resource.item.ItemParts;
import resonantinduction.core.resource.item.ItemParts.Parts;
import resonantinduction.core.tilenetwork.prefab.NetworkUpdateHandler;
import resonantinduction.electrical.armbot.BlockArmbot;
import resonantinduction.electrical.armbot.command.TaskBreak;
import resonantinduction.electrical.armbot.command.TaskDrop;
import resonantinduction.electrical.armbot.command.TaskEnd;
import resonantinduction.electrical.armbot.command.TaskFire;
import resonantinduction.electrical.armbot.command.TaskGOTO;
import resonantinduction.electrical.armbot.command.TaskGive;
import resonantinduction.electrical.armbot.command.TaskGrabEntity;
import resonantinduction.electrical.armbot.command.TaskGrabItem;
import resonantinduction.electrical.armbot.command.TaskHarvest;
import resonantinduction.electrical.armbot.command.TaskIF;
import resonantinduction.electrical.armbot.command.TaskIdle;
import resonantinduction.electrical.armbot.command.TaskPlace;
import resonantinduction.electrical.armbot.command.TaskReturn;
import resonantinduction.electrical.armbot.command.TaskRotateBy;
import resonantinduction.electrical.armbot.command.TaskRotateTo;
import resonantinduction.electrical.armbot.command.TaskStart;
import resonantinduction.electrical.armbot.command.TaskTake;
import resonantinduction.electrical.armbot.command.TaskUse;
import resonantinduction.electrical.generator.solar.BlockSolarPanel;
import resonantinduction.electrical.multimeter.ItemReadoutTools;
import resonantinduction.mechanical.belt.BlockConveyorBelt;
import resonantinduction.mechanical.fluid.BlockKitchenSink;
import resonantinduction.mechanical.fluid.BlockReleaseValve;
import resonantinduction.mechanical.fluid.BlockTank;
import resonantinduction.mechanical.fluid.EnumGas;
import resonantinduction.mechanical.fluid.ItemFluidCan;
import resonantinduction.mechanical.fluid.pipes.BlockPipe;
import resonantinduction.mechanical.fluid.pipes.FluidPartsMaterial;
import resonantinduction.mechanical.fluid.pipes.ItemBlockPipe;
import resonantinduction.mechanical.fluid.pump.BlockConstructionPump;
import resonantinduction.mechanical.fluid.pump.BlockDrain;
import resonantinduction.mechanical.fluid.pump.BlockPumpMachine;
import resonantinduction.old.api.coding.TaskRegistry;
import resonantinduction.old.core.ItemOreDirv;
import resonantinduction.old.core.misc.BehaviorDispenseEgg;
import resonantinduction.old.core.misc.EntityFarmEgg;
import resonantinduction.old.core.misc.EnumBird;
import resonantinduction.old.core.misc.ItemColoredDust;
import resonantinduction.old.core.misc.ItemCommonTool;
import resonantinduction.old.core.misc.ItemFarmEgg;
import resonantinduction.old.core.recipe.RecipeLoader;
import resonantinduction.old.mechanics.processor.BlockProcessor;
import resonantinduction.old.transport.crate.BlockCrate;
import resonantinduction.old.transport.crate.ItemBlockCrate;
import resonantinduction.old.transport.encoder.BlockEncoder;
import resonantinduction.old.transport.encoder.ItemDisk;
import resonantinduction.old.transport.hopper.BlockAdvancedHopper;
import resonantinduction.old.transport.imprinter.BlockImprinter;
import resonantinduction.old.transport.imprinter.ItemImprinter;
import resonantinduction.old.transport.logistic.BlockDetector;
import resonantinduction.old.transport.logistic.BlockManipulator;
import resonantinduction.old.transport.logistic.BlockRejector;
import calclavia.lib.ore.OreGenReplaceStone;
import calclavia.lib.ore.OreGenerator;
import calclavia.lib.prefab.item.ItemBlockHolder;
import calclavia.lib.utility.FluidHelper;
import calclavia.lib.utility.PlayerKeyHandler;
import calclavia.lib.utility.SaveManager;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.Mod.Instance;
import cpw.mods.fml.common.Mod.Metadata;
import cpw.mods.fml.common.ModMetadata;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.network.NetworkRegistry;
import cpw.mods.fml.common.registry.EntityRegistry;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.TickRegistry;
import cpw.mods.fml.relauncher.Side;
import dark.lib.CoreRegistry;
import dark.lib.EnumMaterial;
import dark.lib.EnumOrePart;
import dark.lib.LaserEntityDamageSource;
//@Mod(modid = ResonantInductionTransport.MOD_ID, name = ResonantInductionTransport.MOD_NAME, version = ResonantInductionTransport.VERSION, useMetadata = true)
//@NetworkMod(channels = { ResonantInductionTransport.CHANNEL }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketHandler.class)
public class ResonantInductionTransport
{
public static final String TEXTURE_DIRECTORY = "textures/";
public static final String BLOCK_DIRECTORY = TEXTURE_DIRECTORY + "blocks/";
public static final String ITEM_DIRECTORY = TEXTURE_DIRECTORY + "items/";
public static final String MODEL_DIRECTORY = TEXTURE_DIRECTORY + "models/";
public static final String GUI_DIRECTORY = TEXTURE_DIRECTORY + "gui/";
public static final String CHANNEL = "ALChannel";
// @Mod
public static final String MOD_ID = "AssemblyLine";
public static final String MOD_NAME = "Assembly Line";
public static final String DOMAIN = "al";
public static final String PREFIX = DOMAIN + ":";
public static String DIRECTORY_NO_SLASH = "assets/" + DOMAIN + "/";
public static String DIRECTORY = "/" + DIRECTORY_NO_SLASH;
public static String LANGUAGE_PATH = DIRECTORY + "languages/";
public static String SOUND_PATH = DIRECTORY + "audio/";
// @SidedProxy(clientSide = "com.builtbroken.assemblyline.client.ClientProxy", serverSide =
// "com.builtbroken.assemblyline.CommonProxy")
public static CommonProxy proxy;
@Instance(ResonantInductionTransport.MOD_ID)
public static ResonantInductionTransport instance;
@Metadata(ResonantInductionTransport.MOD_ID)
public static ModMetadata meta;
private static final String[] LANGUAGES_SUPPORTED = new String[] { "en_US", "de_DE" };
public static final Configuration CONFIGURATION = new Configuration(new File(Loader.instance().getConfigDir(), "AssemblyLine.cfg"));
public static Logger FMLog = Logger.getLogger(ResonantInductionTransport.MOD_NAME);
public static boolean VINALLA_RECIPES = false;
public static int entitiesIds = 60;
private static PacketIDTile tilePacket;
public static PacketIDTile getTilePacket()
{
if (tilePacket == null)
{
tilePacket = new PacketIDTile(ResonantInductionTransport.CHANNEL);
}
return tilePacket;
}
@EventHandler
public void preInit(FMLPreInitializationEvent event)
{
CONFIGURATION.load();
DarkCore.instance().preLoad();
Modstats.instance().getReporter().registerMod(this);
MinecraftForge.EVENT_BUS.register(this);
MinecraftForge.EVENT_BUS.register(new FluidHelper());
MinecraftForge.EVENT_BUS.register(SaveManager.instance());
TickRegistry.registerTickHandler(NetworkUpdateHandler.instance(), Side.SERVER);
TickRegistry.registerScheduledTickHandler(new PlayerKeyHandler(ResonantInductionTransport.CHANNEL), Side.CLIENT);
MinecraftForge.EVENT_BUS.register(new LaserEntityDamageSource(null));
NetworkRegistry.instance().registerGuiHandler(this, proxy);
TaskRegistry.registerCommand(new TaskDrop());
TaskRegistry.registerCommand(new TaskGive());
TaskRegistry.registerCommand(new TaskTake());
TaskRegistry.registerCommand(new TaskGrabItem());
TaskRegistry.registerCommand(new TaskGrabEntity());
TaskRegistry.registerCommand(new TaskRotateBy());
TaskRegistry.registerCommand(new TaskRotateTo());
TaskRegistry.registerCommand(new TaskUse());
TaskRegistry.registerCommand(new TaskIF());
TaskRegistry.registerCommand(new TaskGOTO());
TaskRegistry.registerCommand(new TaskReturn());
TaskRegistry.registerCommand(new TaskEnd());
TaskRegistry.registerCommand(new TaskFire());
TaskRegistry.registerCommand(new TaskHarvest());
TaskRegistry.registerCommand(new TaskPlace());
TaskRegistry.registerCommand(new TaskBreak());
TaskRegistry.registerCommand(new TaskStart());
TaskRegistry.registerCommand(new TaskIdle());
this.registerObjects();
proxy.preInit();
}
@EventHandler
public void init(FMLInitializationEvent event)
{
DarkCore.instance().Load();
FMLog.info("Loaded: " + TranslationHelper.loadLanguages(LANGUAGE_PATH, LANGUAGES_SUPPORTED) + " languages.");
for (EnumGas gas : EnumGas.values())
{
FluidRegistry.registerFluid(gas.getGas());
}
if (RecipeLoader.blockGas != null)
{
EnumGas.NATURAL_GAS.getGas().setBlockID(RecipeLoader.blockGas);
}
if (RecipeLoader.blockGas != null)
{
GameRegistry.registerWorldGenerator(new GasOreGenerator());
}
if (RecipeLoader.blockOre != null)
{
for (OreData data : OreData.values())
{
if (data.doWorldGen)
{
OreGenReplaceStone gen = data.getGeneratorSettings();
if (gen != null)
{
OreGenerator.addOre(gen);
}
}
}
}
if (RecipeLoader.itemParts != null)
{
for (Parts part : Parts.values())
{
OreDictionary.registerOre(part.name, new ItemStack(RecipeLoader.itemParts, 1, part.ordinal()));
}
}
proxy.init();
}
@EventHandler
public void postInit(FMLPostInitializationEvent event)
{
DarkCore.instance().postLoad();
proxy.postInit();
RecipeLoader.instance().loadRecipes();
CONFIGURATION.save();
}
/** Separated method for registering & creating objects */
public void registerObjects()
{
/* BLOCKS */
RecipeLoader.blockManipulator = CoreRegistry.createNewBlock("Manipulator", ResonantInductionTransport.MOD_ID, BlockManipulator.class);
RecipeLoader.blockCrate = (BlockCrate) CoreRegistry.createNewBlock("Crate", ResonantInductionTransport.MOD_ID, BlockCrate.class, ItemBlockCrate.class);
RecipeLoader.blockImprinter = CoreRegistry.createNewBlock("Imprinter", ResonantInductionTransport.MOD_ID, BlockImprinter.class);
RecipeLoader.blockDetector = CoreRegistry.createNewBlock("Detector", ResonantInductionTransport.MOD_ID, BlockDetector.class);
RecipeLoader.blockRejector = CoreRegistry.createNewBlock("Rejector", ResonantInductionTransport.MOD_ID, BlockRejector.class);
RecipeLoader.blockEncoder = CoreRegistry.createNewBlock("Encoder", ResonantInductionTransport.MOD_ID, BlockEncoder.class);
RecipeLoader.blockArmbot = CoreRegistry.createNewBlock("Armbot", ResonantInductionTransport.MOD_ID, BlockArmbot.class);
RecipeLoader.blockTurntable = CoreRegistry.createNewBlock("Turntable", ResonantInductionTransport.MOD_ID, BlockTurntable.class);
RecipeLoader.processorMachine = CoreRegistry.createNewBlock("ALBlockProcessor", ResonantInductionTransport.MOD_ID, BlockProcessor.class, ItemBlockHolder.class);
RecipeLoader.blockAdvancedHopper = CoreRegistry.createNewBlock("ALBlockHopper", ResonantInductionTransport.MOD_ID, BlockAdvancedHopper.class, ItemBlockHolder.class);
RecipeLoader.blockPipe = CoreRegistry.createNewBlock("FMBlockPipe", ResonantInductionTransport.MOD_ID, BlockPipe.class, ItemBlockPipe.class);
RecipeLoader.blockPumpMachine = CoreRegistry.createNewBlock("FMBlockPump", ResonantInductionTransport.MOD_ID, BlockPumpMachine.class, ItemBlockHolder.class);
RecipeLoader.blockReleaseValve = CoreRegistry.createNewBlock("FMBlockReleaseValve", ResonantInductionTransport.MOD_ID, BlockReleaseValve.class, ItemBlockHolder.class);
RecipeLoader.blockTank = CoreRegistry.createNewBlock("FMBlockTank", ResonantInductionTransport.MOD_ID, BlockTank.class, ItemBlockPipe.class);
RecipeLoader.blockSink = CoreRegistry.createNewBlock("FMBlockSink", ResonantInductionTransport.MOD_ID, BlockKitchenSink.class, ItemBlockHolder.class);
RecipeLoader.blockDrain = CoreRegistry.createNewBlock("FMBlockDrain", ResonantInductionTransport.MOD_ID, BlockDrain.class, ItemBlockHolder.class);
RecipeLoader.blockConPump = CoreRegistry.createNewBlock("FMBlockConstructionPump", ResonantInductionTransport.MOD_ID, BlockConstructionPump.class, ItemBlockHolder.class);
RecipeLoader.blockSteamGen = CoreRegistry.createNewBlock("DMBlockSteamMachine", ResonantInductionTransport.MOD_ID, BlockSmallSteamGen.class, ItemBlockHolder.class);
RecipeLoader.blockOre = CoreRegistry.createNewBlock("DMBlockOre", ResonantInductionTransport.MOD_ID, BlockOre.class, ItemBlockOre.class);
RecipeLoader.blockWire = CoreRegistry.createNewBlock("DMBlockWire", ResonantInductionTransport.MOD_ID, BlockWire.class, ItemBlockWire.class);
RecipeLoader.blockDebug = CoreRegistry.createNewBlock("DMBlockDebug", ResonantInductionTransport.MOD_ID, BlockDebug.class, ItemBlockHolder.class);
RecipeLoader.blockStainGlass = CoreRegistry.createNewBlock("DMBlockStainedGlass", ResonantInductionTransport.MOD_ID, BlockColorGlass.class, ItemBlockColored.class);
RecipeLoader.blockColorSand = CoreRegistry.createNewBlock("DMBlockColorSand", ResonantInductionTransport.MOD_ID, BlockColorSand.class, ItemBlockColored.class);
RecipeLoader.blockBasalt = CoreRegistry.createNewBlock("DMBlockBasalt", ResonantInductionTransport.MOD_ID, BlockBasalt.class, ItemBlockColored.class);
RecipeLoader.blockGlowGlass = CoreRegistry.createNewBlock("DMBlockGlowGlass", ResonantInductionTransport.MOD_ID, BlockColorGlowGlass.class, ItemBlockColored.class);
RecipeLoader.blockSolar = CoreRegistry.createNewBlock("DMBlockSolar", ResonantInductionTransport.MOD_ID, BlockSolarPanel.class, ItemBlockHolder.class);
RecipeLoader.blockGas = CoreRegistry.createNewBlock("DMBlockGas", ResonantInductionTransport.MOD_ID, BlockGasOre.class, ItemBlockHolder.class);
RecipeLoader.blockBatBox = CoreRegistry.createNewBlock("DMBlockBatBox", ResonantInductionTransport.MOD_ID, BlockBatteryBox.class, ItemBlockEnergyStorage.class);
/* ITEMS */
RecipeLoader.itemTool = CoreRegistry.createNewItem("DMReadoutTools", ResonantInductionTransport.MOD_ID, ItemReadoutTools.class, true);
RecipeLoader.battery = CoreRegistry.createNewItem("DMItemBattery", ResonantInductionTransport.MOD_ID, ItemBattery.class, true);
RecipeLoader.wrench = CoreRegistry.createNewItem("DMWrench", ResonantInductionTransport.MOD_ID, ItemWrench.class, true);
RecipeLoader.itemGlowingSand = CoreRegistry.createNewItem("DMItemGlowingSand", ResonantInductionTransport.MOD_ID, ItemColoredDust.class, true);
RecipeLoader.itemDiggingTool = CoreRegistry.createNewItem("ItemDiggingTools", ResonantInductionTransport.MOD_ID, ItemCommonTool.class, true);
RecipeLoader.itemVehicleTest = CoreRegistry.createNewItem("ItemVehicleTest", ResonantInductionTransport.MOD_ID, ItemVehicleSpawn.class, true);
RecipeLoader.itemImprint = new ItemImprinter(CONFIGURATION.getItem("Imprint", DarkCore.getNextItemId()).getInt());
RecipeLoader.itemDisk = new ItemDisk(CONFIGURATION.getItem("Disk", DarkCore.getNextItemId()).getInt());
RecipeLoader.itemFluidCan = CoreRegistry.createNewItem("ItemFluidCan", ResonantInductionTransport.MOD_ID, ItemFluidCan.class, true);
RecipeLoader.itemParts = CoreRegistry.createNewItem("DMCraftingParts", ResonantInductionTransport.MOD_ID, ItemParts.class, true);
RecipeLoader.itemMetals = CoreRegistry.createNewItem("DMOreDirvParts", ResonantInductionTransport.MOD_ID, ItemOreDirv.class, true);
// ALRecipeLoader.itemMPWire = CoreRegistry.createNewItem("DMMPWire", AssemblyLine.MOD_ID,
// ItemWire.class, true);
TileEntityAssembly.refresh_diff = CONFIGURATION.get("TileSettings", "RefreshRandomRange", 9, "n = value of config, 1 + n, random number range from 1 to n that will be added to the lowest refresh value").getInt();
TileEntityAssembly.refresh_min_rate = CONFIGURATION.get("TileSettings", "RefreshLowestValue", 20, "Lowest value the refresh rate of the tile network will be").getInt();
// Entities
if (ResonantInductionTransport.CONFIGURATION.get("Override", "Eggs", true).getBoolean(true))
{
Item.itemsList[Item.egg.itemID] = null;
Item.egg = null;
Item.egg = new ItemFarmEgg(88);
GameRegistry.registerItem(Item.egg, "FTEgg", MOD_ID);
EntityRegistry.registerGlobalEntityID(EntityFarmEgg.class, "FarmEgg", EntityRegistry.findGlobalUniqueEntityId());
EntityRegistry.registerModEntity(EntityFarmEgg.class, "FarmEgg", entitiesIds++, this, 64, 1, true);
BlockDispenser.dispenseBehaviorRegistry.putObject(Item.egg, new BehaviorDispenseEgg());
}
EntityRegistry.registerGlobalEntityID(EntityTestCar.class, "TestCar", EntityRegistry.findGlobalUniqueEntityId());
EntityRegistry.registerModEntity(EntityTestCar.class, "TestCar", 60, this, 64, 1, true);
for (EnumBird bird : EnumBird.values())
{
if (bird != EnumBird.VANILLA_CHICKEN && CONFIGURATION.get("Entities", "Enable_" + bird.name(), true).getBoolean(true))
{
bird.register();
}
}
// Post object creation, normally creative tab icon setup
if (RecipeLoader.blockPipe != null)
{
ResonantInductionTabs.tabHydraulic().setIconItemStack(FluidPartsMaterial.IRON.getStack());
}
else
{
ResonantInductionTabs.tabHydraulic().setIconItemStack(new ItemStack(Item.bucketWater));
}
if (RecipeLoader.itemMetals != null)
{
ResonantInductionTabs.tabIndustrial().itemStack = EnumMaterial.getStack(RecipeLoader.itemMetals, EnumMaterial.IRON, EnumOrePart.GEARS, 1);
RecipeLoader.parseOreNames(CONFIGURATION);
}
else
{
}
if (RecipeLoader.blockConveyorBelt != null)
{
ResonantInductionTabs.tabAutomation().setIconItemStack(new ItemStack(RecipeLoader.blockConveyorBelt));
}
else
{
ResonantInductionTabs.tabAutomation().setIconItemStack(new ItemStack(Block.pistonStickyBase));
}
}
public void loadModMeta()
{
meta.modId = ResonantInductionTransport.MOD_ID;
meta.name = ResonantInductionTransport.MOD_NAME;
meta.version = ResonantInductionTransport.VERSION;
meta.description = "Simi Realistic factory system for minecraft bring in conveyor belts, robotic arms, and simple machines";
meta.url = "http://www.universalelectricity.com/coremachine";
meta.logoFile = "/al_logo.png";
meta.authorList = Arrays.asList(new String[] { "DarkGuardsman" });
meta.credits = "Archadia - Developer" + "LiQuiD - Dev of BioTech\n" + "Hangcow - Ex-Dev Greater Security\n" + "Calclavia - Ex-CoDev of assembly line\n" + "Briman0094 - Ex-CoDev of assembly line\n" + "Elrath18 - Colored Glass, Sand, & Stone\n" + "Doppelgangerous - Researcher\n" + "Freesound.org - Sound effects\n" + "MineMan1(wdtod) - asset creation\n" + "AlphaToOmega - asset creation\n" + "pinksheep - asset creation\n" + "X-wing9 - asset creation\n" + "Azkhare - asset creation\n" + "Vexatos - German Translation\n" + "crafteverywhere - Chinese Translations\n" + "PancakeCandy - French & Dutch Translations\n";
meta.autogenerated = false;
}
}