package com.austinv11.peripheralsplusplus;
import com.austinv11.collectiveframework.minecraft.config.ConfigException;
import com.austinv11.collectiveframework.minecraft.config.ConfigRegistry;
import com.austinv11.collectiveframework.minecraft.logging.Logger;
import com.austinv11.collectiveframework.minecraft.reference.ModIds;
import com.austinv11.collectiveframework.multithreading.SimpleRunnable;
import com.austinv11.peripheralsplusplus.client.gui.GuiHandler;
import com.austinv11.peripheralsplusplus.creativetab.CreativeTabPPP;
import com.austinv11.peripheralsplusplus.entities.EntityNanoBotSwarm;
import com.austinv11.peripheralsplusplus.entities.EntityRidableTurtle;
import com.austinv11.peripheralsplusplus.hooks.ComputerCraftHooks;
import com.austinv11.peripheralsplusplus.hooks.ComputerCraftNotFoundException;
import com.austinv11.peripheralsplusplus.hooks.ComputerCraftRegistry;
import com.austinv11.peripheralsplusplus.init.ModBlocks;
import com.austinv11.peripheralsplusplus.init.ModItems;
import com.austinv11.peripheralsplusplus.init.Recipes;
import com.austinv11.peripheralsplusplus.items.ItemNanoSwarm;
import com.austinv11.peripheralsplusplus.mount.DynamicMount;
import com.austinv11.peripheralsplusplus.network.*;
import com.austinv11.peripheralsplusplus.pocket.PocketMotionDetector;
import com.austinv11.peripheralsplusplus.pocket.PocketPeripheralContainer;
import com.austinv11.peripheralsplusplus.proxy.CommonProxy;
import com.austinv11.peripheralsplusplus.reference.Config;
import com.austinv11.peripheralsplusplus.reference.Reference;
import com.austinv11.peripheralsplusplus.turtles.*;
import com.austinv11.peripheralsplusplus.turtles.peripherals.PeripheralChunkLoader;
import com.austinv11.peripheralsplusplus.utils.IPlusPlusPeripheral;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.*;
import cpw.mods.fml.common.network.NetworkRegistry;
import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper;
import cpw.mods.fml.common.registry.EntityRegistry;
import cpw.mods.fml.relauncher.Side;
import dan200.computercraft.api.ComputerCraftAPI;
import dan200.computercraft.api.turtle.ITurtleUpgrade;
import net.minecraft.block.BlockDispenser;
import net.minecraftforge.common.ForgeChunkManager;
import net.minecraftforge.common.MinecraftForge;
@Mod(modid= Reference.MOD_ID,name = Reference.MOD_NAME,version = Reference.VERSION/*, guiFactory = Reference.GUI_FACTORY_CLASS*/, dependencies = "after:CollectiveFramework")
public class PeripheralsPlusPlus {
public static int VILLAGER_ID = 1337; //:P
public static SimpleNetworkWrapper NETWORK;
@Mod.Instance(Reference.MOD_ID)
public static PeripheralsPlusPlus instance;
@SidedProxy(clientSide = Reference.CLIENT_PROXY_CLASS, serverSide = Reference.SERVER_PROXY_CLASS)
public static CommonProxy proxy;
public static Logger LOGGER = new Logger(Reference.MOD_NAME);
public static String BASE_PPP_DIR = "./mods/PPP/";
@Mod.EventHandler
public void preInit(FMLPreInitializationEvent event) {
try {
ConfigRegistry.registerConfig(new Config());
} catch (ConfigException e) {
LOGGER.fatal("Fatal problem with the Peripherals++ config has been caught, if this continues, please delete the config file");
e.printStackTrace();
}
NETWORK = NetworkRegistry.INSTANCE.newSimpleChannel("ppp");
NETWORK.registerMessage(AudioPacket.AudioPacketHandler.class, AudioPacket.class, 0, Side.CLIENT);
NETWORK.registerMessage(AudioResponsePacket.AudioResponsePacketHandler.class, AudioResponsePacket.class, 1, Side.SERVER);
NETWORK.registerMessage(ChatPacket.ChatPacketHandler.class, ChatPacket.class, 4, Side.CLIENT);
NETWORK.registerMessage(ScaleRequestPacket.ScaleRequestPacketHandler.class, ScaleRequestPacket.class, 5, Side.CLIENT);
NETWORK.registerMessage(ScaleRequestResponsePacket.ScaleRequestResponsePacketHandler.class, ScaleRequestResponsePacket.class, 6, Side.SERVER);
NETWORK.registerMessage(CommandPacket.CommandPacketHandler.class, CommandPacket.class, 7, Side.CLIENT);
NETWORK.registerMessage(ParticlePacket.ParticlePacketHandler.class, ParticlePacket.class, 8, Side.CLIENT);
NETWORK.registerMessage(InputEventPacket.InputEventPacketHandler.class, InputEventPacket.class, 9, Side.SERVER);
NETWORK.registerMessage(GuiPacket.GuiPacketHandler.class, GuiPacket.class, 10, Side.CLIENT);
NETWORK.registerMessage(TextFieldInputEventPacket.TextFieldInputEventPacketHandler.class, TextFieldInputEventPacket.class, 11, Side.SERVER);
NETWORK.registerMessage(RidableTurtlePacket.RidableTurtlePacketHandler.class, RidableTurtlePacket.class, 12, Side.SERVER);
NETWORK.registerMessage(RobotEventPacket.RobotEventPacketHandler.class, RobotEventPacket.class, 13, Side.CLIENT);
NETWORK.registerMessage(PermCardChangePacket.PermCardChangePacketHandler.class, PermCardChangePacket.class, 14, Side.SERVER);
NETWORK.registerMessage(SynthPacket.SynthPacketHandler.class, SynthPacket.class, 15, Side.CLIENT);
NETWORK.registerMessage(SynthResponsePacket.SynthResponsePacketHandler.class, SynthResponsePacket.class, 16, Side.SERVER);
proxy.iconManagerInit();
proxy.prepareGuis();
proxy.registerEvents();
ModItems.preInit();
ModBlocks.init();
LOGGER.info("Preparing the mount...");
DynamicMount.prepareMount();
}
@Mod.EventHandler
public void init(FMLInitializationEvent event) {
NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandler());
LOGGER.info("Registering peripherals...");
proxy.registerTileEntities();
ComputerCraftAPI.registerPeripheralProvider(new IPlusPlusPeripheral.Provider());
LOGGER.info("Registering turtle upgrades...");
registerUpgrade(new TurtleChatBox());
registerUpgrade(new TurtlePlayerSensor());
registerUpgrade(new TurtleCompass());
registerUpgrade(new TurtleXP());
if (Loader.isModLoaded(ModIds.Factorization) || Loader.isModLoaded(ModIds.JABBA)) {
LOGGER.info("A mod that adds barrels is loaded! Registering the barrel turtle upgrade...");
registerUpgrade(new TurtleBarrel());
} else
LOGGER.info("No barrel-adding mods found, skipping the barrel turtle upgrade");
registerUpgrade(new TurtleOreDictionary());
registerUpgrade(new TurtleEnvironmentScanner());
registerUpgrade(new TurtleFeeder());
registerUpgrade(new TurtleShear());
registerUpgrade(new TurtleSignReader());
registerUpgrade(new TurtleGarden());
if (Loader.isModLoaded(ModIds.ProjectRed_Exploration) || Loader.isModLoaded(ModIds.BluePower)) {
LOGGER.info("At least one RedPower-like mod is loaded! Registering RedPower-like turtle upgrades...");
registerRedPowerLikeUpgrades();
} else
LOGGER.info("No RedPower-like mods found, skipping RedPower-like turtle upgrades");
registerUpgrade(new TurtleSpeaker());
registerUpgrade(new TurtleTank());
registerUpgrade(new TurtleNoteBlock());
registerUpgrade(new TurtleRidable());
registerUpgrade(new TurtleDispenser());
registerUpgrade(new TurtleResupply());
registerUpgrade(new TurtleChunkLoader());
LOGGER.info("Registering pocket computer upgrades...");
try {
ComputerCraftRegistry.registerPocketUpgrade(new PocketMotionDetector());
ComputerCraftRegistry.registerPocketUpgrade(new PocketPeripheralContainer());
} catch (Exception e) {
e.printStackTrace();
}
LOGGER.info("All peripherals and turtle upgrades registered!");
proxy.registerRenderers();
if (Config.enableVillagers)
proxy.setupVillagers();
EntityRegistry.registerModEntity(EntityRidableTurtle.class, "Ridable Turtle", 1, instance, 64, 1, true);
EntityRegistry.registerModEntity(EntityNanoBotSwarm.class, "NanoBotSwarm", 2, instance, 64, 20, true);
ForgeChunkManager.setForcedChunkLoadingCallback(PeripheralsPlusPlus.instance, new PeripheralChunkLoader.LoaderHandler());
}
@Mod.EventHandler
public void postInit(FMLPostInitializationEvent event) throws ComputerCraftNotFoundException {
Recipes.init();
BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.nanoSwarm, new ItemNanoSwarm.BehaviorNanoSwarm());
SimpleRunnable.RESTRICT_THREAD_USAGE = false;
}
@Mod.EventHandler
public void onServerStop(FMLServerStoppedEvent event) {
ComputerCraftHooks.cachedPeripherals.clear();
ComputerCraftHooks.cachedExtraPeripherals.clear();
}
public static void registerUpgrade(ITurtleUpgrade u) {
ComputerCraftAPI.registerTurtleUpgrade(u);
CreativeTabPPP.upgrades.add(u);
if (u instanceof TurtleDropCollector)
MinecraftForge.EVENT_BUS.register(((TurtleDropCollector) u).newInstanceOfListener());
}
private void registerRedPowerLikeUpgrades() {
// Better solution but don't keeps old ids
// int i = 0;
// for (final ToolType type : ToolType.values()) {
// if (type == ToolType.UNKNOWN) continue;
//
// for (final ToolMaterial material : ToolMaterial.values()) {
// if (material == ToolMaterial.UNKNOWN) continue;
//
// final int id = i++;
// registerUpgrade(new TurtleProjRed() {
//
// @Override
// public ToolType getToolType() {
// return type;
// }
//
// @Override
// public ToolMaterial getToolMaterial() {
// return material;
// }
//
// @Override
// public int getID() {
// return id;
// }
// });
// }
// }
// Not as good as the first but better than yours and it keeps the same ids as before
if (Loader.isModLoaded(ModIds.ProjectRed_Exploration)) {
int i = 0;
for (final TurtleProjRed.ToolMaterial material : new TurtleProjRed.ToolMaterial[]{TurtleProjRed.ToolMaterial.PERIDOT, TurtleProjRed.ToolMaterial.RUBY, TurtleProjRed.ToolMaterial.SAPPHIRE}) {
for (final TurtleProjRed.ToolType type : new TurtleProjRed.ToolType[]{TurtleProjRed.ToolType.AXE, TurtleProjRed.ToolType.HOE, TurtleProjRed.ToolType.PICKAXE, TurtleProjRed.ToolType.SHOVEL, TurtleProjRed.ToolType.SWORD}) {
final int id = i++;
registerUpgrade(new TurtleProjRed() {
@Override
public ToolType getToolType() {
return type;
}
@Override
public ToolMaterial getToolMaterial() {
return material;
}
@Override
public int getID() {
return id;
}
});
}
}
}
if (Loader.isModLoaded(ModIds.BluePower)) {
int j = 0;
for (final TurtleBluePower.ToolMaterial material : new TurtleBluePower.ToolMaterial[]{TurtleBluePower.ToolMaterial.AMETHYST, TurtleBluePower.ToolMaterial.RUBY, TurtleBluePower.ToolMaterial.SAPPHIRE}) {
for (final TurtleBluePower.ToolType type : new TurtleBluePower.ToolType[]{TurtleBluePower.ToolType.AXE, TurtleBluePower.ToolType.HOE, TurtleBluePower.ToolType.PICKAXE, TurtleBluePower.ToolType.SHOVEL, TurtleBluePower.ToolType.SWORD}) {
final int id = j++;
registerUpgrade(new TurtleBluePower() {
@Override
public ToolType getToolType() {
return type;
}
@Override
public ToolMaterial getToolMaterial() {
return material;
}
@Override
public int getID() {
return id;
}
});
}
}
}
}
}