Package mods.railcraft.common.modules

Source Code of mods.railcraft.common.modules.ModuleCore

/*
* 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.modules;

import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.network.NetworkRegistry;
import cpw.mods.fml.common.registry.GameRegistry;
import java.util.EnumSet;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import org.apache.logging.log4j.Level;
import net.minecraft.item.crafting.CraftingManager;
import net.minecraft.entity.monster.EntityEnderman;
import net.minecraft.entity.item.EntityMinecart;
import net.minecraft.item.crafting.FurnaceRecipes;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.oredict.ShapedOreRecipe;
import mods.railcraft.api.crafting.RailcraftCraftingManager;
import mods.railcraft.api.fuel.FuelManager;
import mods.railcraft.api.helpers.Helpers;
import mods.railcraft.api.signals.SignalTools;
import mods.railcraft.client.sounds.SoundLimiterTicker;
import mods.railcraft.common.blocks.machine.IEnumMachine;
import mods.railcraft.common.blocks.machine.MachineTileRegistery;
import mods.railcraft.common.blocks.machine.MultiBlockHelper;
import mods.railcraft.common.blocks.machine.alpha.EnumMachineAlpha;
import mods.railcraft.common.blocks.machine.beta.EnumMachineBeta;
import mods.railcraft.common.blocks.machine.delta.EnumMachineDelta;
import mods.railcraft.common.blocks.machine.gamma.EnumMachineGamma;
import mods.railcraft.common.carts.*;
import mods.railcraft.common.core.Railcraft;
import mods.railcraft.common.core.RailcraftConfig;
import mods.railcraft.common.gui.GuiHandler;
import mods.railcraft.common.items.CrowbarHandler;
import mods.railcraft.common.items.ItemCrowbar;
import mods.railcraft.common.plugins.forge.FuelPlugin;
import mods.railcraft.common.items.ItemGoggles;
import mods.railcraft.common.items.ItemMagnifyingGlass;
import mods.railcraft.common.items.ItemNugget;
import mods.railcraft.common.items.ItemCrowbarReinforced;
import mods.railcraft.common.items.RailcraftPartItems;
import mods.railcraft.common.items.RailcraftToolItems;
import mods.railcraft.common.fluids.BucketHandler;
import mods.railcraft.common.fluids.Fluids;
import mods.railcraft.common.plugins.buildcraft.BuildcraftPlugin;
import mods.railcraft.common.util.crafting.BlastFurnaceCraftingManager;
import mods.railcraft.common.util.crafting.CokeOvenCraftingManager;
import mods.railcraft.common.util.crafting.CraftingHandler;
import mods.railcraft.common.util.crafting.RockCrusherCraftingManager;
import mods.railcraft.common.util.crafting.RollingMachineCraftingManager;
import mods.railcraft.common.fluids.FluidContainers;
import mods.railcraft.common.fluids.FluidHelper;
import mods.railcraft.common.fluids.RailcraftFluids;
import mods.railcraft.common.items.*;
import mods.railcraft.common.items.ItemRail.EnumRail;
import mods.railcraft.common.items.ItemRailbed.EnumRailbed;
import mods.railcraft.common.plugins.forge.CraftingPlugin;
import mods.railcraft.common.plugins.forge.ItemRegistry;
import mods.railcraft.common.plugins.forge.LootPlugin;
import mods.railcraft.common.util.crafting.*;
import mods.railcraft.common.util.misc.Game;
import mods.railcraft.common.util.network.PacketBuilder;
import net.minecraft.block.BlockDispenser;
import net.minecraft.entity.EntityList;

import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.oredict.RecipeSorter;

public class ModuleCore extends RailcraftModule {

    @Override
    public void preInit() {
        LinkageManager.reset();

        RailcraftCraftingManager.cokeOven = new CokeOvenCraftingManager();
        RailcraftCraftingManager.blastFurnace = new BlastFurnaceCraftingManager();
        RailcraftCraftingManager.rockCrusher = new RockCrusherCraftingManager();
        RailcraftCraftingManager.rollingMachine = new RollingMachineCraftingManager();

        SignalTools.packetBuilder = PacketBuilder.instance();

        RailcraftFluids.preInit();
        MinecraftForge.EVENT_BUS.register(RailcraftFluids.getTextureHook());
        MinecraftForge.EVENT_BUS.register(BucketHandler.INSTANCE);

        Helpers.structures = new MultiBlockHelper();

        EntityItemFireproof.register();

        RecipeSorter.register("railcraft:rotor.repair", RotorRepairRecipe.class, RecipeSorter.Category.SHAPED, "after:minecraft:shaped");
        RecipeSorter.register("railcraft:locomotive.painting", LocomotivePaintingRecipe.class, RecipeSorter.Category.SHAPED, "after:minecraft:shaped");
        RecipeSorter.register("railcraft:routing.table.copy", RoutingTableCopyRecipe.class, RecipeSorter.Category.SHAPED, "after:minecraft:shaped");
        RecipeSorter.register("railcraft:routing.ticket.copy", RoutingTicketCopyRecipe.class, RecipeSorter.Category.SHAPED, "after:minecraft:shaped");
        RecipeSorter.register("railcraft:tank.cart.filter", TankCartFilterRecipe.class, RecipeSorter.Category.SHAPELESS, "after:minecraft:shapeless");
    }

    @Override
    public void initFirst() {
        NetworkRegistry.INSTANCE.registerGuiHandler(Railcraft.getMod(), new GuiHandler());

        LootPlugin.init();

        ItemCrowbar.registerItem();
        ItemCrowbarReinforced.registerItem();
        MinecraftForge.EVENT_BUS.register(CrowbarHandler.instance());

        ItemMagnifyingGlass.register();
        ItemGoggles.registerItem();

        RailcraftToolItems.initializeToolsArmor();

        ItemNugget.getNugget(ItemNugget.EnumNugget.IRON);

        EntityEnderman.setCarriable(Blocks.gravel, false);

        BuildcraftPlugin.init();

        MinecraftForge.EVENT_BUS.register(MinecartHooks.getInstance());
        MinecraftForge.EVENT_BUS.register(LinkageHandler.getInstance());

        FMLCommonHandler.instance().bus().register(new CraftingHandler());
        FMLCommonHandler.instance().bus().register(new SoundLimiterTicker());

        if (RailcraftConfig.useCollisionHandler()) {
            if (EntityMinecart.getCollisionHandler() != null)
                Game.log(Level.WARN, "Existing Minecart Collision Handler detected, overwriting. Please check your configs to ensure this is desired behavior.");
            EntityMinecart.setCollisionHandler(MinecartHooks.getInstance());
        }

        Set<Item> testSet = new HashSet<Item>();
        if (!RailcraftConfig.useOldRecipes()) {
            testSet.add(Item.getItemFromBlock(Blocks.rail));
            testSet.add(Item.getItemFromBlock(Blocks.golden_rail));
            testSet.add(Item.getItemFromBlock(Blocks.detector_rail));
            testSet.add(Item.getItemFromBlock(Blocks.activator_rail));
        }

        if (RailcraftConfig.getRecipeConfig("railcraft.cart.furnace"))
            testSet.add(Items.furnace_minecart);

//        MiscTools.addShapelessRecipe(new ItemStack(Item.coal, 20), Block.dirt);
        Iterator it = CraftingManager.getInstance().getRecipeList().iterator();
        while (it.hasNext()) {
            IRecipe r = (IRecipe) it.next();
            ItemStack output = null;
            try {
                output = r.getRecipeOutput();
            } catch (Exception ex) {
            }
            if (output != null)
                if (testSet.contains(output.getItem()))
                    it.remove();
        }

        // Items
        replaceVanillaCart(EnumCart.BASIC, Items.minecart, "MinecartRideable", 42);
        replaceVanillaCart(EnumCart.CHEST, Items.chest_minecart, "MinecartChest", 43);
        replaceVanillaCart(EnumCart.FURNACE, Items.furnace_minecart, "MinecartFurnace", 44);
        replaceVanillaCart(EnumCart.TNT, Items.tnt_minecart, "MinecartTNT", 45);
        replaceVanillaCart(EnumCart.HOPPER, Items.hopper_minecart, "MinecartHopper", 46);

        CraftingPlugin.addShapelessRecipe(new ItemStack(Items.minecart), Items.chest_minecart);
        CraftingPlugin.addShapelessRecipe(new ItemStack(Items.minecart), Items.furnace_minecart);
        CraftingPlugin.addShapelessRecipe(new ItemStack(Items.minecart), Items.tnt_minecart);
        CraftingPlugin.addShapelessRecipe(new ItemStack(Items.minecart), Items.hopper_minecart);

        LootPlugin.addLootRailway(EnumCart.BASIC.getCartItem(), 1, 1, "cart.basic");
        LootPlugin.addLootRailway(EnumCart.CHEST.getCartItem(), 1, 1, "cart.chest");
        LootPlugin.addLootRailway(EnumCart.TNT.getCartItem(), 1, 3, "cart.tnt");
        LootPlugin.addLootRailway(new ItemStack(Blocks.rail), 8, 32, "track.basic");
        LootPlugin.addLootRailway(EnumCart.HOPPER.getCartItem(), 1, 1, "cart.hopper");

        Blocks.rail.setHarvestLevel("pickaxe", 0);
        Blocks.rail.setHarvestLevel("crowbar", 0);
        Blocks.golden_rail.setHarvestLevel("pickaxe", 0);
        Blocks.golden_rail.setHarvestLevel("crowbar", 0);
        Blocks.detector_rail.setHarvestLevel("pickaxe", 0);
        Blocks.detector_rail.setHarvestLevel("crowbar", 0);
        Blocks.activator_rail.setHarvestLevel("pickaxe", 0);
        Blocks.activator_rail.setHarvestLevel("crowbar", 0);

        // Define Recipies
        if (RailcraftConfig.getRecipeConfig("railcraft.cart.bronze")) {
            IRecipe recipe = new ShapedOreRecipe(new ItemStack(Items.minecart), false, new Object[]{
                "I I",
                "III",
                'I', "ingotBronze",});
            CraftingManager.getInstance().getRecipeList().add(recipe);
        }

        if (RailcraftConfig.getRecipeConfig("railcraft.cart.steel")) {
            IRecipe recipe = new ShapedOreRecipe(new ItemStack(Items.minecart, 2), false, new Object[]{
                "I I",
                "III",
                'I', "ingotSteel",});
            CraftingManager.getInstance().getRecipeList().add(recipe);
        }

        // Old rails
        if (!RailcraftConfig.useOldRecipes()) {
            ItemStack stackRailNormal = new ItemStack(Blocks.rail, 32);
            ItemStack stackRailBooster = new ItemStack(Blocks.golden_rail, 16);
            ItemStack stackRailDetector = new ItemStack(Blocks.detector_rail, 16);
            ItemStack stackRailActivator = new ItemStack(Blocks.activator_rail, 16);

            Object woodRailbed = RailcraftItem.railbed.getRecipeObject(EnumRailbed.WOOD);
            CraftingPlugin.addShapedRecipe(stackRailNormal,
                    "I I",
                    "I#I",
                    "I I",
                    'I', RailcraftItem.rail.getRecipeObject(EnumRail.STANDARD),
                    '#', woodRailbed);
            CraftingPlugin.addShapedRecipe(stackRailBooster,
                    "I I",
                    "I#I",
                    "IrI",
                    'I', RailcraftItem.rail.getRecipeObject(EnumRail.ADVANCED),
                    '#', woodRailbed,
                    'r', Items.redstone);
            CraftingPlugin.addShapedRecipe(stackRailDetector,
                    "IsI",
                    "I#I",
                    "IrI",
                    'I', RailcraftItem.rail.getRecipeObject(EnumRail.STANDARD),
                    '#', Blocks.stone_pressure_plate,
                    'r', Items.redstone,
                    's', woodRailbed);
            CraftingPlugin.addShapedRecipe(stackRailActivator,
                    "ItI",
                    "I#I",
                    "ItI",
                    'I', RailcraftItem.rail.getRecipeObject(EnumRail.STANDARD),
                    '#', woodRailbed,
                    't', new ItemStack(Blocks.redstone_torch));

            CraftingPlugin.addShapelessRecipe(RailcraftItem.rail.getStack(1, EnumRail.STANDARD),
                    Blocks.rail,
                    Blocks.rail,
                    Blocks.rail,
                    Blocks.rail,
                    Blocks.rail,
                    Blocks.rail,
                    Blocks.rail,
                    Blocks.rail);
        }

        MachineTileRegistery.registerTileEntities();
    }

    private void replaceVanillaCart(EnumCart cartType, Item original, String entityTag, int entityId) {
        cartType.registerEntity();

        MinecartHooks.vanillaEntityReplacements.put(original, cartType);

        EntityList.stringToClassMapping.remove(entityTag);
        EntityList.IDtoClassMapping.remove(entityId);
        EntityList.addMapping(cartType.getCartClass(), entityTag, entityId);

        BlockDispenser.dispenseBehaviorRegistry.putObject(original, null);

        original.setMaxStackSize(RailcraftConfig.getMinecartStackSize());
        cartType.setCartItem(new ItemStack(original));
    }

    @Override

    public void initSecond() {
        if (RailcraftConfig.useCreosoteFurnaceRecipes() || !EnumMachineAlpha.COKE_OVEN.isAvaliable()) {
            FurnaceRecipes.smelting().func_151394_a(new ItemStack(Items.coal, 1, 0), FluidContainers.getCreosoteOilBottle(2), 0.0F);
            FurnaceRecipes.smelting().func_151394_a(new ItemStack(Items.coal, 1, 1), FluidContainers.getCreosoteOilBottle(1), 0.0F);
        }
    }

    @Override
    public void postInit() {
        RailcraftFluids.postInit();

        GameRegistry.registerFuelHandler(FuelPlugin.getFuelHandler());

        addLiquidFuels();

        FluidHelper.nerfWaterBottle();

        Set<IEnumMachine> machines = new HashSet<IEnumMachine>();
        machines.addAll(EnumSet.allOf(EnumMachineAlpha.class));
        machines.addAll(EnumSet.allOf(EnumMachineBeta.class));
        machines.addAll(EnumSet.allOf(EnumMachineGamma.class));
        machines.addAll(EnumSet.allOf(EnumMachineDelta.class));

        for (IEnumMachine machine : machines) {
            if (machine.isAvaliable())
                ItemRegistry.registerItemStack(machine.getTag(), machine.getItem());
        }

//        CreeperPlugin.postSetup();
//----------------------------------------------
// Boiler Test Setup
// ---------------------------------------------
//        StandardTank tankWater = new StandardTank(FluidHelper.BUCKET_VOLUME * 1000);
//        StandardTank tankSteam = new StandardTank(FluidHelper.BUCKET_VOLUME * 1000);
//        tankWater.setFluid(Fluids.WATER.get(tankWater.getCapacity()));
//        SteamBoiler boiler = new SteamBoiler(tankWater, tankSteam);
//        class TestProvider implements IFuelProvider {
//
//            public int fuel = 3200;
//
//            @Override
//            public double getMoreFuel() {
//                if (fuel > 0) {
//                    fuel--;
//                    return 1;
//                }
//                return 0;
//            }
//
//            @Override
//            public double getHeatStep() {
//                return Steam.HEAT_STEP;
//            }
//
//        }
//        TestProvider provider = new TestProvider();
//        boiler.setFuelProvider(provider);
//        int ticks = 0;
//        while (provider.fuel > 0 || boiler.burnTime > boiler.getFuelPerCycle(1) || boiler.getHeat() > 20) {
//            boiler.tick(1);
//            ticks++;
//        }
//        System.out.printf("Ran for %d ticks.%n", ticks);
//        System.out.printf("Steam Produced=%s%n", tankSteam.getFluidAmount());
//        System.exit(0);
    }

    public static void addLiquidFuels() {
        int bioheat = (int) (16000 * RailcraftConfig.boilerBiofuelMultiplier());
        Fluid ethanol = Fluids.BIOETHANOL.get();
        if (ethanol != null)
            FuelManager.addBoilerFuel(ethanol, bioheat); // Biofuel

        Fluid biofuel = Fluids.BIOFUEL.get();
        if (biofuel != null)
            FuelManager.addBoilerFuel(biofuel, bioheat); // Biofuel

        Fluid fuel = Fluids.FUEL.get();
        if (fuel != null)
            FuelManager.addBoilerFuel(fuel, (int) (48000 * RailcraftConfig.boilerFuelMultiplier())); // Fuel

        Fluid coal = Fluids.COAL.get();
        if (coal != null)
            FuelManager.addBoilerFuel(coal, (int) (32000 * RailcraftConfig.boilerFuelMultiplier())); // Liquefaction Coal

        Fluid pyrotheum = Fluids.PYROTHEUM.get();
        if (pyrotheum != null)
            FuelManager.addBoilerFuel(pyrotheum, (int) (64000 * RailcraftConfig.boilerFuelMultiplier())); // Blazing Pyrotheum

        Fluid creosote = Fluids.CREOSOTE.get();
        if (creosote != null)
            FuelManager.addBoilerFuel(creosote, 4800); // Creosote
    }

}
TOP

Related Classes of mods.railcraft.common.modules.ModuleCore

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.