472 lines
25 KiB
Java
472 lines
25 KiB
Java
/**
|
|
* Copyright (c) 2011-2015, SpaceToad and the BuildCraft Team
|
|
* http://www.mod-buildcraft.com
|
|
* <p/>
|
|
* BuildCraft is distributed under the terms of the Minecraft Mod Public
|
|
* License 1.0, or MMPL. Please check the contents of the license located in
|
|
* http://www.mod-buildcraft.com/MMPL-1.0.txt
|
|
*/
|
|
package buildcraft;
|
|
|
|
import java.io.File;
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
|
|
import net.minecraft.init.Blocks;
|
|
import net.minecraft.init.Items;
|
|
import net.minecraft.item.Item;
|
|
import net.minecraft.item.ItemStack;
|
|
|
|
import cpw.mods.fml.client.event.ConfigChangedEvent;
|
|
import cpw.mods.fml.common.FMLCommonHandler;
|
|
import cpw.mods.fml.common.Loader;
|
|
import cpw.mods.fml.common.Mod;
|
|
import cpw.mods.fml.common.event.FMLInitializationEvent;
|
|
import cpw.mods.fml.common.event.FMLInterModComms;
|
|
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
|
import cpw.mods.fml.common.event.FMLServerStartedEvent;
|
|
import cpw.mods.fml.common.event.FMLServerStartingEvent;
|
|
import cpw.mods.fml.common.event.FMLServerStoppingEvent;
|
|
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
|
import cpw.mods.fml.common.network.NetworkRegistry;
|
|
import cpw.mods.fml.common.registry.EntityRegistry;
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
import net.minecraftforge.client.event.TextureStitchEvent;
|
|
import net.minecraftforge.common.DimensionManager;
|
|
import net.minecraftforge.common.MinecraftForge;
|
|
|
|
import buildcraft.api.blueprints.BuilderAPI;
|
|
import buildcraft.api.blueprints.SchematicTile;
|
|
import buildcraft.api.boards.RedstoneBoardRegistry;
|
|
import buildcraft.api.lists.ListRegistry;
|
|
import buildcraft.api.recipes.BuildcraftRecipeRegistry;
|
|
import buildcraft.api.robots.RobotManager;
|
|
import buildcraft.api.statements.IActionInternal;
|
|
import buildcraft.api.statements.ITriggerInternal;
|
|
import buildcraft.api.statements.StatementManager;
|
|
import buildcraft.api.transport.PipeManager;
|
|
import buildcraft.core.BCCreativeTab;
|
|
import buildcraft.core.BCRegistry;
|
|
import buildcraft.core.CompatHooks;
|
|
import buildcraft.core.DefaultProps;
|
|
import buildcraft.core.InterModComms;
|
|
import buildcraft.core.Version;
|
|
import buildcraft.core.config.ConfigManager;
|
|
import buildcraft.core.network.EntityIds;
|
|
import buildcraft.robotics.BlockRequester;
|
|
import buildcraft.robotics.BlockZonePlan;
|
|
import buildcraft.robotics.BoardProgrammingRecipe;
|
|
import buildcraft.robotics.DockingStationPipe;
|
|
import buildcraft.robotics.EntityRobot;
|
|
import buildcraft.robotics.ImplRedstoneBoardRegistry;
|
|
import buildcraft.robotics.ItemRedstoneBoard;
|
|
import buildcraft.robotics.ItemRobot;
|
|
import buildcraft.robotics.ItemRobotStation;
|
|
import buildcraft.robotics.RobotIntegrationRecipe;
|
|
import buildcraft.robotics.RobotRegistryProvider;
|
|
import buildcraft.robotics.RobotStationPluggable;
|
|
import buildcraft.robotics.RoboticsGuiHandler;
|
|
import buildcraft.robotics.RoboticsProxy;
|
|
import buildcraft.robotics.TileRequester;
|
|
import buildcraft.robotics.TileZonePlan;
|
|
import buildcraft.robotics.ai.AIRobotAttack;
|
|
import buildcraft.robotics.ai.AIRobotBreak;
|
|
import buildcraft.robotics.ai.AIRobotDeliverRequested;
|
|
import buildcraft.robotics.ai.AIRobotDisposeItems;
|
|
import buildcraft.robotics.ai.AIRobotFetchAndEquipItemStack;
|
|
import buildcraft.robotics.ai.AIRobotFetchItem;
|
|
import buildcraft.robotics.ai.AIRobotGoAndLinkToDock;
|
|
import buildcraft.robotics.ai.AIRobotGoto;
|
|
import buildcraft.robotics.ai.AIRobotGotoBlock;
|
|
import buildcraft.robotics.ai.AIRobotGotoSleep;
|
|
import buildcraft.robotics.ai.AIRobotGotoStation;
|
|
import buildcraft.robotics.ai.AIRobotGotoStationAndLoad;
|
|
import buildcraft.robotics.ai.AIRobotGotoStationAndLoadFluids;
|
|
import buildcraft.robotics.ai.AIRobotGotoStationAndUnload;
|
|
import buildcraft.robotics.ai.AIRobotGotoStationToLoad;
|
|
import buildcraft.robotics.ai.AIRobotGotoStationToLoadFluids;
|
|
import buildcraft.robotics.ai.AIRobotGotoStationToUnload;
|
|
import buildcraft.robotics.ai.AIRobotGotoStationToUnloadFluids;
|
|
import buildcraft.robotics.ai.AIRobotHarvest;
|
|
import buildcraft.robotics.ai.AIRobotLoad;
|
|
import buildcraft.robotics.ai.AIRobotLoadFluids;
|
|
import buildcraft.robotics.ai.AIRobotMain;
|
|
import buildcraft.robotics.ai.AIRobotPlant;
|
|
import buildcraft.robotics.ai.AIRobotPumpBlock;
|
|
import buildcraft.robotics.ai.AIRobotRecharge;
|
|
import buildcraft.robotics.ai.AIRobotSearchAndGotoBlock;
|
|
import buildcraft.robotics.ai.AIRobotSearchAndGotoStation;
|
|
import buildcraft.robotics.ai.AIRobotSearchBlock;
|
|
import buildcraft.robotics.ai.AIRobotSearchEntity;
|
|
import buildcraft.robotics.ai.AIRobotSearchRandomGroundBlock;
|
|
import buildcraft.robotics.ai.AIRobotSearchStackRequest;
|
|
import buildcraft.robotics.ai.AIRobotSearchStation;
|
|
import buildcraft.robotics.ai.AIRobotShutdown;
|
|
import buildcraft.robotics.ai.AIRobotSleep;
|
|
import buildcraft.robotics.ai.AIRobotStraightMoveTo;
|
|
import buildcraft.robotics.ai.AIRobotUnload;
|
|
import buildcraft.robotics.ai.AIRobotUnloadFluids;
|
|
import buildcraft.robotics.ai.AIRobotUseToolOnBlock;
|
|
import buildcraft.robotics.boards.BCBoardNBT;
|
|
import buildcraft.robotics.boards.BoardRobotBomber;
|
|
import buildcraft.robotics.boards.BoardRobotBuilder;
|
|
import buildcraft.robotics.boards.BoardRobotButcher;
|
|
import buildcraft.robotics.boards.BoardRobotCarrier;
|
|
import buildcraft.robotics.boards.BoardRobotDelivery;
|
|
import buildcraft.robotics.boards.BoardRobotEmpty;
|
|
import buildcraft.robotics.boards.BoardRobotFarmer;
|
|
import buildcraft.robotics.boards.BoardRobotFluidCarrier;
|
|
import buildcraft.robotics.boards.BoardRobotHarvester;
|
|
import buildcraft.robotics.boards.BoardRobotKnight;
|
|
import buildcraft.robotics.boards.BoardRobotLeaveCutter;
|
|
import buildcraft.robotics.boards.BoardRobotLumberjack;
|
|
import buildcraft.robotics.boards.BoardRobotMiner;
|
|
import buildcraft.robotics.boards.BoardRobotPicker;
|
|
import buildcraft.robotics.boards.BoardRobotPlanter;
|
|
import buildcraft.robotics.boards.BoardRobotPump;
|
|
import buildcraft.robotics.boards.BoardRobotShovelman;
|
|
import buildcraft.robotics.boards.BoardRobotStripes;
|
|
import buildcraft.robotics.boards.RedstoneBoardRobotEmptyNBT;
|
|
import buildcraft.robotics.map.MapManager;
|
|
import buildcraft.robotics.statements.ActionRobotFilter;
|
|
import buildcraft.robotics.statements.ActionRobotFilterTool;
|
|
import buildcraft.robotics.statements.ActionRobotGotoStation;
|
|
import buildcraft.robotics.statements.ActionRobotWakeUp;
|
|
import buildcraft.robotics.statements.ActionRobotWorkInArea;
|
|
import buildcraft.robotics.statements.ActionRobotWorkInArea.AreaType;
|
|
import buildcraft.robotics.statements.ActionStationAcceptFluids;
|
|
import buildcraft.robotics.statements.ActionStationAcceptItems;
|
|
import buildcraft.robotics.statements.ActionStationForbidRobot;
|
|
import buildcraft.robotics.statements.ActionStationProvideFluids;
|
|
import buildcraft.robotics.statements.ActionStationProvideItems;
|
|
import buildcraft.robotics.statements.ActionStationRequestItems;
|
|
import buildcraft.robotics.statements.ActionStationRequestItemsMachine;
|
|
import buildcraft.robotics.statements.RobotsActionProvider;
|
|
import buildcraft.robotics.statements.RobotsTriggerProvider;
|
|
import buildcraft.robotics.statements.StatementParameterMapLocation;
|
|
import buildcraft.robotics.statements.StatementParameterRobot;
|
|
import buildcraft.robotics.statements.TriggerRobotInStation;
|
|
import buildcraft.robotics.statements.TriggerRobotLinked;
|
|
import buildcraft.robotics.statements.TriggerRobotSleep;
|
|
import buildcraft.silicon.ItemRedstoneChipset;
|
|
|
|
@Mod(name = "BuildCraft Robotics", version = Version.VERSION, useMetadata = false, modid = "BuildCraft|Robotics", dependencies = DefaultProps.DEPENDENCY_CORE)
|
|
public class BuildCraftRobotics extends BuildCraftMod {
|
|
@Mod.Instance("BuildCraft|Robotics")
|
|
public static BuildCraftRobotics instance;
|
|
|
|
public static BlockZonePlan zonePlanBlock;
|
|
public static BlockRequester requesterBlock;
|
|
|
|
public static ItemRedstoneBoard redstoneBoard;
|
|
public static Item robotItem;
|
|
public static Item robotStationItem;
|
|
|
|
public static ITriggerInternal triggerRobotSleep = new TriggerRobotSleep();
|
|
public static ITriggerInternal triggerRobotInStation = new TriggerRobotInStation();
|
|
public static ITriggerInternal triggerRobotLinked = new TriggerRobotLinked(false);
|
|
public static ITriggerInternal triggerRobotReserved = new TriggerRobotLinked(true);
|
|
|
|
public static IActionInternal actionRobotGotoStation = new ActionRobotGotoStation();
|
|
public static IActionInternal actionRobotWakeUp = new ActionRobotWakeUp();
|
|
public static IActionInternal actionRobotWorkInArea = new ActionRobotWorkInArea(AreaType.WORK);
|
|
public static IActionInternal actionRobotLoadUnloadArea = new ActionRobotWorkInArea(AreaType.LOAD_UNLOAD);
|
|
public static IActionInternal actionRobotFilter = new ActionRobotFilter();
|
|
public static IActionInternal actionRobotFilterTool = new ActionRobotFilterTool();
|
|
public static IActionInternal actionStationRequestItems = new ActionStationRequestItems();
|
|
public static IActionInternal actionStationProvideItems = new ActionStationProvideItems();
|
|
public static IActionInternal actionStationAcceptFluids = new ActionStationAcceptFluids();
|
|
public static IActionInternal actionStationProvideFluids = new ActionStationProvideFluids();
|
|
public static IActionInternal actionStationForceRobot = new ActionStationForbidRobot(true);
|
|
public static IActionInternal actionStationForbidRobot = new ActionStationForbidRobot(false);
|
|
public static IActionInternal actionStationAcceptItems = new ActionStationAcceptItems();
|
|
public static IActionInternal actionStationMachineRequestItems = new ActionStationRequestItemsMachine();
|
|
|
|
public static List<String> blacklistedRobots;
|
|
|
|
public static MapManager manager;
|
|
private static Thread managerThread;
|
|
|
|
@Mod.EventHandler
|
|
public void preInit(FMLPreInitializationEvent evt) {
|
|
new BCCreativeTab("boards");
|
|
|
|
BuildCraftCore.mainConfigManager.register("general", "boards.blacklist", new String[]{}, "Blacklisted robots boards", ConfigManager.RestartRequirement.GAME);
|
|
|
|
reloadConfig(ConfigManager.RestartRequirement.GAME);
|
|
|
|
robotItem = new ItemRobot().setUnlocalizedName("robot");
|
|
BCRegistry.INSTANCE.registerItem(robotItem, false);
|
|
|
|
robotStationItem = new ItemRobotStation().setUnlocalizedName("robotStation");
|
|
BCRegistry.INSTANCE.registerItem(robotStationItem, false);
|
|
|
|
redstoneBoard = new ItemRedstoneBoard();
|
|
redstoneBoard.setUnlocalizedName("redstone_board");
|
|
BCRegistry.INSTANCE.registerItem(redstoneBoard, false);
|
|
|
|
zonePlanBlock = (BlockZonePlan) CompatHooks.INSTANCE.getBlock(BlockZonePlan.class);
|
|
zonePlanBlock.setBlockName("zonePlan");
|
|
BCRegistry.INSTANCE.registerBlock(zonePlanBlock, false);
|
|
|
|
requesterBlock = (BlockRequester) CompatHooks.INSTANCE.getBlock(BlockRequester.class);
|
|
requesterBlock.setBlockName("requester");
|
|
BCRegistry.INSTANCE.registerBlock(requesterBlock, false);
|
|
|
|
RedstoneBoardRegistry.instance = new ImplRedstoneBoardRegistry();
|
|
|
|
RedstoneBoardRegistry.instance.setEmptyRobotBoard(RedstoneBoardRobotEmptyNBT.instance);
|
|
|
|
// Cheapest, dumbest robot types
|
|
// Those generally do very simple tasks
|
|
RedstoneBoardRegistry.instance.registerBoardType(new BCBoardNBT("buildcraft:boardRobotPicker", "picker", BoardRobotPicker.class, "green"), 8000);
|
|
RedstoneBoardRegistry.instance.registerBoardType(new BCBoardNBT("buildcraft:boardRobotCarrier", "carrier", BoardRobotCarrier.class, "green"), 8000);
|
|
RedstoneBoardRegistry.instance.registerBoardType(new BCBoardNBT("buildcraft:boardRobotFluidCarrier", "fluidCarrier", BoardRobotFluidCarrier.class, "green"), 8000);
|
|
|
|
// More expensive robot types
|
|
// Those generally handle block mining/harvesting/placement.
|
|
RedstoneBoardRegistry.instance.registerBoardType(new BCBoardNBT("buildcraft:boardRobotLumberjack", "lumberjack", BoardRobotLumberjack.class, "blue"), 32000);
|
|
RedstoneBoardRegistry.instance.registerBoardType(new BCBoardNBT("buildcraft:boardRobotHarvester", "harvester", BoardRobotHarvester.class, "blue"), 32000);
|
|
RedstoneBoardRegistry.instance.registerBoardType(new BCBoardNBT("buildcraft:miner", "miner", BoardRobotMiner.class, "blue"), 32000);
|
|
RedstoneBoardRegistry.instance.registerBoardType(new BCBoardNBT("buildcraft:boardRobotPlanter", "planter", BoardRobotPlanter.class, "blue"), 32000);
|
|
RedstoneBoardRegistry.instance.registerBoardType(new BCBoardNBT("buildcraft:boardRobotFarmer", "farmer", BoardRobotFarmer.class, "blue"), 32000);
|
|
RedstoneBoardRegistry.instance.registerBoardType(new BCBoardNBT("buildcraft:leave_cutter", "leaveCutter", BoardRobotLeaveCutter.class, "blue"), 32000);
|
|
RedstoneBoardRegistry.instance.registerBoardType(new BCBoardNBT("buildcraft:boardRobotButcher", "butcher", BoardRobotButcher.class, "blue"), 32000);
|
|
RedstoneBoardRegistry.instance.registerBoardType(new BCBoardNBT("buildcraft:shovelman", "shovelman", BoardRobotShovelman.class, "blue"), 32000);
|
|
RedstoneBoardRegistry.instance.registerBoardType(new BCBoardNBT("buildcraft:boardRobotPump", "pump", BoardRobotPump.class, "blue"), 32000);
|
|
|
|
// Even more expensive
|
|
// These handle complex multi-step operations.
|
|
RedstoneBoardRegistry.instance.registerBoardType(new BCBoardNBT("buildcraft:boardRobotDelivery", "delivery", BoardRobotDelivery.class, "green"), 128000);
|
|
RedstoneBoardRegistry.instance.registerBoardType(new BCBoardNBT("buildcraft:boardRobotKnight", "knight", BoardRobotKnight.class, "red"), 128000);
|
|
RedstoneBoardRegistry.instance.registerBoardType(new BCBoardNBT("buildcraft:boardRobotBomber", "bomber", BoardRobotBomber.class, "red"), 128000);
|
|
RedstoneBoardRegistry.instance.registerBoardType(new BCBoardNBT("buildcraft:boardRobotStripes", "stripes", BoardRobotStripes.class, "yellow"), 128000);
|
|
|
|
// Most expensive
|
|
// Overpowered galore!
|
|
if (Loader.isModLoaded("BuildCraft|Builders")) {
|
|
RedstoneBoardRegistry.instance.registerBoardType(new BCBoardNBT("buildcraft:boardRobotBuilder", "builder", BoardRobotBuilder.class, "yellow"), 512000);
|
|
}
|
|
|
|
StatementManager.registerParameterClass(StatementParameterRobot.class);
|
|
StatementManager.registerParameterClass(StatementParameterMapLocation.class);
|
|
StatementManager.registerActionProvider(new RobotsActionProvider());
|
|
StatementManager.registerTriggerProvider(new RobotsTriggerProvider());
|
|
}
|
|
|
|
@Mod.EventHandler
|
|
public void init(FMLInitializationEvent evt) {
|
|
NetworkRegistry.INSTANCE.registerGuiHandler(instance, new RoboticsGuiHandler());
|
|
MinecraftForge.EVENT_BUS.register(this);
|
|
|
|
if (BuildCraftCore.loadDefaultRecipes && Loader.isModLoaded("BuildCraft|Silicon")) {
|
|
loadRecipes();
|
|
}
|
|
|
|
BCCreativeTab.get("boards").setIcon(new ItemStack(BuildCraftRobotics.redstoneBoard, 1));
|
|
|
|
BuilderAPI.schematicRegistry.registerSchematicBlock(requesterBlock, SchematicTile.class);
|
|
|
|
PipeManager.registerPipePluggable(RobotStationPluggable.class, "robotStation");
|
|
EntityRegistry.registerModEntity(EntityRobot.class, "bcRobot", EntityIds.ROBOT, instance, 50, 1, true);
|
|
|
|
BCRegistry.INSTANCE.registerTileEntity(TileZonePlan.class, "net.minecraft.src.buildcraft.commander.TileZonePlan");
|
|
BCRegistry.INSTANCE.registerTileEntity(TileRequester.class, "net.minecraft.src.buildcraft.commander.TileRequester");
|
|
|
|
RobotManager.registryProvider = new RobotRegistryProvider();
|
|
|
|
RobotManager.registerAIRobot(AIRobotMain.class, "aiRobotMain", "buildcraft.core.robots.AIRobotMain");
|
|
RobotManager.registerAIRobot(BoardRobotEmpty.class, "boardRobotEmpty");
|
|
RobotManager.registerAIRobot(BoardRobotBomber.class, "boardRobotBomber", "buildcraft.core.robots.boards.BoardRobotBomber");
|
|
if (Loader.isModLoaded("BuildCraft|Builders")) {
|
|
RobotManager.registerAIRobot(BoardRobotBuilder.class, "boardRobotBuilder", "buildcraft.core.robots.boards.BoardRobotBuilder");
|
|
}
|
|
RobotManager.registerAIRobot(BoardRobotButcher.class, "boardRobotButcher", "buildcraft.core.robots.boards.BoardRobotButcher");
|
|
RobotManager.registerAIRobot(BoardRobotCarrier.class, "boardRobotCarrier", "buildcraft.core.robots.boards.BoardRobotCarrier");
|
|
RobotManager.registerAIRobot(BoardRobotDelivery.class, "boardRobotDelivery", "buildcraft.core.robots.boards.BoardRobotDelivery");
|
|
RobotManager.registerAIRobot(BoardRobotFarmer.class, "boardRobotFarmer", "buildcraft.core.robots.boards.BoardRobotFarmer");
|
|
RobotManager.registerAIRobot(BoardRobotFluidCarrier.class, "boardRobotFluidCarrier", "buildcraft.core.robots.boards.BoardRobotFluidCarrier");
|
|
RobotManager.registerAIRobot(BoardRobotHarvester.class, "boardRobotHarvester", "buildcraft.core.robots.boards.BoardRobotHarvester");
|
|
RobotManager.registerAIRobot(BoardRobotKnight.class, "boardRobotKnight", "buildcraft.core.robots.boards.BoardRobotKnight");
|
|
RobotManager.registerAIRobot(BoardRobotLeaveCutter.class, "boardRobotLeaveCutter", "buildcraft.core.robots.boards.BoardRobotLeaveCutter");
|
|
RobotManager.registerAIRobot(BoardRobotLumberjack.class, "boardRobotLumberjack", "buildcraft.core.robots.boards.BoardRobotLumberjack");
|
|
RobotManager.registerAIRobot(BoardRobotMiner.class, "boardRobotMiner", "buildcraft.core.robots.boards.BoardRobotMiner");
|
|
RobotManager.registerAIRobot(BoardRobotPicker.class, "boardRobotPicker", "buildcraft.core.robots.boards.BoardRobotPicker");
|
|
RobotManager.registerAIRobot(BoardRobotPlanter.class, "boardRobotPlanter", "buildcraft.core.robots.boards.BoardRobotPlanter");
|
|
RobotManager.registerAIRobot(BoardRobotPump.class, "boardRobotPump", "buildcraft.core.robots.boards.BoardRobotPump");
|
|
RobotManager.registerAIRobot(BoardRobotShovelman.class, "boardRobotShovelman", "buildcraft.core.robots.boards.BoardRobotShovelman");
|
|
RobotManager.registerAIRobot(BoardRobotStripes.class, "boardRobotStripes", "buildcraft.core.robots.boards.BoardRobotStripes");
|
|
RobotManager.registerAIRobot(AIRobotAttack.class, "aiRobotAttack", "buildcraft.core.robots.AIRobotAttack");
|
|
RobotManager.registerAIRobot(AIRobotBreak.class, "aiRobotBreak", "buildcraft.core.robots.AIRobotBreak");
|
|
RobotManager.registerAIRobot(AIRobotDeliverRequested.class, "aiRobotDeliverRequested", "buildcraft.core.robots.AIRobotDeliverRequested");
|
|
RobotManager.registerAIRobot(AIRobotDisposeItems.class, "aiRobotDisposeItems", "buildcraft.core.robots.AIRobotDisposeItems");
|
|
RobotManager.registerAIRobot(AIRobotFetchAndEquipItemStack.class, "aiRobotFetchAndEquipItemStack", "buildcraft.core.robots.AIRobotFetchAndEquipItemStack");
|
|
RobotManager.registerAIRobot(AIRobotFetchItem.class, "aiRobotFetchItem", "buildcraft.core.robots.AIRobotFetchItem");
|
|
RobotManager.registerAIRobot(AIRobotGoAndLinkToDock.class, "aiRobotGoAndLinkToDock", "buildcraft.core.robots.AIRobotGoAndLinkToDock");
|
|
RobotManager.registerAIRobot(AIRobotGoto.class, "aiRobotGoto", "buildcraft.core.robots.AIRobotGoto");
|
|
RobotManager.registerAIRobot(AIRobotGotoBlock.class, "aiRobotGotoBlock", "buildcraft.core.robots.AIRobotGotoBlock");
|
|
RobotManager.registerAIRobot(AIRobotGotoSleep.class, "aiRobotGotoSleep", "buildcraft.core.robots.AIRobotGotoSleep");
|
|
RobotManager.registerAIRobot(AIRobotGotoStation.class, "aiRobotGotoStation", "buildcraft.core.robots.AIRobotGotoStation");
|
|
RobotManager.registerAIRobot(AIRobotGotoStationAndLoad.class, "aiRobotGotoStationAndLoad", "buildcraft.core.robots.AIRobotGotoStationAndLoad");
|
|
RobotManager.registerAIRobot(AIRobotGotoStationAndLoadFluids.class, "aiRobotGotoStationAndLoadFluids", "buildcraft.core.robots.AIRobotGotoStationAndLoadFluids");
|
|
RobotManager.registerAIRobot(AIRobotGotoStationAndUnload.class, "aiRobotGotoStationAndUnload", "buildcraft.core.robots.AIRobotGotoStationAndUnload");
|
|
RobotManager.registerAIRobot(AIRobotGotoStationToLoad.class, "aiRobotGotoStationToLoad", "buildcraft.core.robots.AIRobotGotoStationToLoad");
|
|
RobotManager.registerAIRobot(AIRobotGotoStationToLoadFluids.class, "aiRobotGotoStationToLoadFluids", "buildcraft.core.robots.AIRobotGotoStationToLoadFluids");
|
|
RobotManager.registerAIRobot(AIRobotGotoStationToUnload.class, "aiRobotGotoStationToUnload", "buildcraft.core.robots.AIRobotGotoStationToUnload");
|
|
RobotManager.registerAIRobot(AIRobotGotoStationToUnloadFluids.class, "aiRobotGotoStationToUnloadFluids", "buildcraft.core.robots.AIRobotGotoStationToUnloadFluids");
|
|
RobotManager.registerAIRobot(AIRobotHarvest.class, "aiRobotHarvest");
|
|
RobotManager.registerAIRobot(AIRobotLoad.class, "aiRobotLoad", "buildcraft.core.robots.AIRobotLoad");
|
|
RobotManager.registerAIRobot(AIRobotLoadFluids.class, "aiRobotLoadFluids", "buildcraft.core.robots.AIRobotLoadFluids");
|
|
RobotManager.registerAIRobot(AIRobotPlant.class, "aiRobotPlant");
|
|
RobotManager.registerAIRobot(AIRobotPumpBlock.class, "aiRobotPumpBlock", "buildcraft.core.robots.AIRobotPumpBlock");
|
|
RobotManager.registerAIRobot(AIRobotRecharge.class, "aiRobotRecharge", "buildcraft.core.robots.AIRobotRecharge");
|
|
RobotManager.registerAIRobot(AIRobotSearchAndGotoBlock.class, "aiRobotSearchAndGoToBlock");
|
|
RobotManager.registerAIRobot(AIRobotSearchAndGotoStation.class, "aiRobotSearchAndGotoStation", "buildcraft.core.robots.AIRobotSearchAndGotoStation");
|
|
RobotManager.registerAIRobot(AIRobotSearchBlock.class, "aiRobotSearchBlock", "buildcraft.core.robots.AIRobotSearchBlock");
|
|
RobotManager.registerAIRobot(AIRobotSearchEntity.class, "aiRobotSearchEntity", "buildcraft.core.robots.AIRobotSearchEntity");
|
|
RobotManager.registerAIRobot(AIRobotSearchRandomGroundBlock.class, "aiRobotSearchRandomGroundBlock", "buildcraft.core.robots.AIRobotSearchRandomGroundBlock");
|
|
RobotManager.registerAIRobot(AIRobotSearchStackRequest.class, "aiRobotSearchStackRequest", "buildcraft.core.robots.AIRobotSearchStackRequest");
|
|
RobotManager.registerAIRobot(AIRobotSearchStation.class, "aiRobotSearchStation", "buildcraft.core.robots.AIRobotSearchStation");
|
|
RobotManager.registerAIRobot(AIRobotShutdown.class, "aiRobotShutdown");
|
|
RobotManager.registerAIRobot(AIRobotSleep.class, "aiRobotSleep", "buildcraft.core.robots.AIRobotSleep");
|
|
RobotManager.registerAIRobot(AIRobotStraightMoveTo.class, "aiRobotStraightMoveTo", "buildcraft.core.robots.AIRobotStraightMoveTo");
|
|
RobotManager.registerAIRobot(AIRobotUnload.class, "aiRobotUnload", "buildcraft.core.robots.AIRobotUnload");
|
|
RobotManager.registerAIRobot(AIRobotUnloadFluids.class, "aiRobotUnloadFluids", "buildcraft.core.robots.AIRobotUnloadFluids");
|
|
RobotManager.registerAIRobot(AIRobotUseToolOnBlock.class, "aiRobotUseToolOnBlock", "buildcraft.core.robots.AIRobotUseToolOnBlock");
|
|
|
|
RobotManager.registerDockingStation(DockingStationPipe.class, "dockingStationPipe");
|
|
|
|
RoboticsProxy.proxy.registerRenderers();
|
|
|
|
ListRegistry.itemClassAsType.add(ItemRobot.class);
|
|
}
|
|
|
|
public static void loadRecipes() {
|
|
BCRegistry.INSTANCE.addCraftingRecipe(new ItemStack(robotItem),
|
|
"PPP",
|
|
"PRP",
|
|
"C C",
|
|
'P', "ingotIron",
|
|
'R', "crystalRedstone",
|
|
'C', ItemRedstoneChipset.Chipset.DIAMOND.getStack());
|
|
|
|
BCRegistry.INSTANCE.addCraftingRecipe(new ItemStack(redstoneBoard),
|
|
"PPP",
|
|
"PRP",
|
|
"PPP",
|
|
'R', "dustRedstone",
|
|
'P', Items.paper);
|
|
|
|
BCRegistry.INSTANCE.addCraftingRecipe(new ItemStack(zonePlanBlock, 1, 0),
|
|
"IRI",
|
|
"GMG",
|
|
"IDI",
|
|
'M', Items.map,
|
|
'R', "dustRedstone",
|
|
'G', "gearGold",
|
|
'D', "gearDiamond",
|
|
'I', "ingotIron");
|
|
|
|
BCRegistry.INSTANCE.addCraftingRecipe(new ItemStack(requesterBlock, 1, 0),
|
|
"IPI",
|
|
"GCG",
|
|
"IRI",
|
|
'C', "chestWood",
|
|
'R', "dustRedstone",
|
|
'P', Blocks.piston,
|
|
'G', "gearIron",
|
|
'I', "ingotIron");
|
|
|
|
BCRegistry.INSTANCE.addCraftingRecipe(new ItemStack(robotStationItem), " ", " I ", "ICI",
|
|
'I', "ingotIron",
|
|
'C', ItemRedstoneChipset.Chipset.GOLD.getStack());
|
|
|
|
BuildcraftRecipeRegistry.programmingTable.addRecipe(new BoardProgrammingRecipe());
|
|
BuildcraftRecipeRegistry.integrationTable.addRecipe(new RobotIntegrationRecipe());
|
|
}
|
|
|
|
@SubscribeEvent
|
|
@SideOnly(Side.CLIENT)
|
|
public void textureHook(TextureStitchEvent.Pre event) {
|
|
if (event.map.getTextureType() == 1) {
|
|
RedstoneBoardRegistry.instance.registerIcons(event.map);
|
|
}
|
|
}
|
|
|
|
private void stopMapManager() {
|
|
if (manager != null) {
|
|
manager.stop();
|
|
MinecraftForge.EVENT_BUS.unregister(manager);
|
|
FMLCommonHandler.instance().bus().unregister(manager);
|
|
}
|
|
|
|
if (managerThread != null) {
|
|
managerThread.interrupt();
|
|
}
|
|
|
|
managerThread = null;
|
|
manager = null;
|
|
}
|
|
|
|
@Mod.EventHandler
|
|
public void serverUnload(FMLServerStoppingEvent event) {
|
|
stopMapManager();
|
|
}
|
|
|
|
@Mod.EventHandler
|
|
public void serverLoad(FMLServerStartingEvent event) {
|
|
File f = new File(DimensionManager.getCurrentSaveRootDirectory(), "buildcraft/zonemap");
|
|
|
|
try {
|
|
f.mkdirs();
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
stopMapManager();
|
|
|
|
manager = new MapManager(f);
|
|
managerThread = new Thread(manager);
|
|
managerThread.start();
|
|
|
|
BoardRobotPicker.onServerStart();
|
|
|
|
MinecraftForge.EVENT_BUS.register(manager);
|
|
FMLCommonHandler.instance().bus().register(manager);
|
|
}
|
|
|
|
@Mod.EventHandler
|
|
public void serverLoadFinish(FMLServerStartedEvent event) {
|
|
manager.initialize();
|
|
}
|
|
|
|
@Mod.EventHandler
|
|
public void processRequests(FMLInterModComms.IMCEvent event) {
|
|
InterModComms.processIMC(event);
|
|
}
|
|
|
|
public void reloadConfig(ConfigManager.RestartRequirement restartType) {
|
|
if (restartType == ConfigManager.RestartRequirement.GAME) {
|
|
|
|
blacklistedRobots = new ArrayList<String>();
|
|
blacklistedRobots.addAll(Arrays.asList(BuildCraftCore.mainConfigManager.get("general",
|
|
"boards.blacklist").getStringList()));
|
|
reloadConfig(ConfigManager.RestartRequirement.WORLD);
|
|
} else if (restartType == ConfigManager.RestartRequirement.WORLD) {
|
|
reloadConfig(ConfigManager.RestartRequirement.NONE);
|
|
} else {
|
|
if (BuildCraftCore.mainConfiguration.hasChanged()) {
|
|
BuildCraftCore.mainConfiguration.save();
|
|
}
|
|
}
|
|
}
|
|
|
|
@SubscribeEvent
|
|
public void onConfigChanged(ConfigChangedEvent.OnConfigChangedEvent event) {
|
|
if ("BuildCraft|Core".equals(event.modID)) {
|
|
reloadConfig(event.isWorldRunning ? ConfigManager.RestartRequirement.NONE : ConfigManager.RestartRequirement.WORLD);
|
|
}
|
|
}
|
|
}
|