mirror of
https://github.com/GTNewHorizons/ForestryMC.git
synced 2026-11-15 09:34:57 +00:00
239 lines
9.1 KiB
Java
239 lines
9.1 KiB
Java
/*******************************************************************************
|
|
* Copyright (c) 2011-2014 SirSengir. All rights reserved. This program and the accompanying materials are made
|
|
* available under the terms of the GNU Lesser Public License v3 which accompanies this distribution, and is available
|
|
* at http://www.gnu.org/licenses/lgpl-3.0.txt
|
|
*
|
|
* Various Contributors including, but not limited to: SirSengir (original work), CovertJaguar, Player, Binnie,
|
|
* MysteriousAges
|
|
******************************************************************************/
|
|
package forestry.plugins;
|
|
|
|
import static forestry.Forestry.isDreamcraftLoaded;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.init.Items;
|
|
import net.minecraft.item.Item;
|
|
import net.minecraft.item.ItemBlock;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.util.MovingObjectPosition;
|
|
import net.minecraftforge.client.event.TextureStitchEvent;
|
|
import net.minecraftforge.common.MinecraftForge;
|
|
import net.minecraftforge.event.entity.player.FillBucketEvent;
|
|
import net.minecraftforge.fluids.Fluid;
|
|
import net.minecraftforge.fluids.FluidRegistry;
|
|
import net.minecraftforge.fluids.FluidStack;
|
|
|
|
import cpw.mods.fml.common.eventhandler.Event;
|
|
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
|
import cpw.mods.fml.common.registry.GameRegistry;
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
import forestry.api.core.ForestryAPI;
|
|
import forestry.api.fuels.FuelManager;
|
|
import forestry.api.fuels.GeneratorFuel;
|
|
import forestry.api.recipes.RecipeManagers;
|
|
import forestry.core.config.Config;
|
|
import forestry.core.config.Constants;
|
|
import forestry.core.fluids.BlockForestryFluid;
|
|
import forestry.core.fluids.Fluids;
|
|
import forestry.core.fluids.LiquidRegistryHelper;
|
|
import forestry.core.items.EnumContainerType;
|
|
import forestry.core.items.ItemLiquidContainer;
|
|
import forestry.core.items.ItemRegistryFluids;
|
|
import forestry.core.utils.Log;
|
|
import forestry.core.utils.StringUtil;
|
|
|
|
@Plugin(
|
|
pluginID = "Fluids",
|
|
name = "Fluids",
|
|
author = "mezz",
|
|
url = Constants.URL,
|
|
unlocalizedDescription = "for.plugin.fluids.description")
|
|
public class PluginFluids extends ForestryPlugin {
|
|
|
|
private static final List<Fluids> forestryFluidsWithBlocks = new ArrayList<>();
|
|
|
|
public static ItemRegistryFluids items;
|
|
|
|
private static void createFluid(Fluids forestryFluid) {
|
|
if (forestryFluid.getFluid() == null && Config.isFluidEnabled(forestryFluid)) {
|
|
String fluidName = forestryFluid.getTag();
|
|
if (!FluidRegistry.isFluidRegistered(fluidName)) {
|
|
Fluid fluid = new Fluid(fluidName).setDensity(forestryFluid.getDensity())
|
|
.setViscosity(forestryFluid.getViscosity()).setTemperature(forestryFluid.getTemperature());
|
|
FluidRegistry.registerFluid(fluid);
|
|
createBlock(forestryFluid);
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void createBlock(Fluids forestryFluid) {
|
|
Fluid fluid = forestryFluid.getFluid();
|
|
Block fluidBlock = fluid.getBlock();
|
|
|
|
if (Config.isBlockEnabled(forestryFluid.getTag())) {
|
|
if (fluidBlock == null) {
|
|
fluidBlock = forestryFluid.makeBlock();
|
|
if (fluidBlock != null) {
|
|
fluidBlock.setBlockName("forestry.fluid." + forestryFluid.getTag());
|
|
GameRegistry.registerBlock(fluidBlock, ItemBlock.class, StringUtil.cleanBlockName(fluidBlock));
|
|
forestryFluidsWithBlocks.add(forestryFluid);
|
|
}
|
|
} else {
|
|
GameRegistry.UniqueIdentifier blockID = GameRegistry.findUniqueIdentifierFor(fluidBlock);
|
|
Log.severe(
|
|
"Pre-existing {0} fluid block detected, deferring to {1}:{2}, "
|
|
+ "this may cause issues if the server/client have different mod load orders, "
|
|
+ "recommended that you disable all but one instance of {0} fluid blocks via your configs.",
|
|
fluid.getName(),
|
|
blockID.modId,
|
|
blockID.name);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void registerItemsAndBlocks() {
|
|
for (Fluids fluidType : Fluids.forestryFluids) {
|
|
createFluid(fluidType);
|
|
}
|
|
|
|
items = new ItemRegistryFluids();
|
|
}
|
|
|
|
@Override
|
|
public void preInit() {
|
|
MinecraftForge.EVENT_BUS.register(getTextureHook());
|
|
MinecraftForge.EVENT_BUS.register(getFillBucketHook());
|
|
}
|
|
|
|
@Override
|
|
public void doInit() {
|
|
for (Fluids fluidType : Fluids.values()) {
|
|
if (fluidType.getFluid() == null) {
|
|
continue;
|
|
}
|
|
|
|
for (EnumContainerType type : EnumContainerType.values()) {
|
|
ItemLiquidContainer container = items.getContainer(type, fluidType);
|
|
if (container == null) {
|
|
continue;
|
|
}
|
|
|
|
LiquidRegistryHelper.registerLiquidContainer(fluidType, container.getItemStack());
|
|
}
|
|
|
|
for (ItemStack filledContainer : fluidType.getOtherContainers()) {
|
|
LiquidRegistryHelper.registerLiquidContainer(fluidType, filledContainer);
|
|
}
|
|
}
|
|
|
|
if (RecipeManagers.squeezerManager != null) {
|
|
if (!isDreamcraftLoaded) {
|
|
RecipeManagers.squeezerManager.addContainerRecipe(
|
|
10,
|
|
items.canEmpty.getItemStack(),
|
|
PluginCore.items.ingotTin.getItemStack(),
|
|
0.05f);
|
|
}
|
|
RecipeManagers.squeezerManager.addContainerRecipe(
|
|
10,
|
|
items.waxCapsuleEmpty.getItemStack(),
|
|
PluginCore.items.beeswax.getItemStack(),
|
|
0.10f);
|
|
RecipeManagers.squeezerManager.addContainerRecipe(
|
|
10,
|
|
items.refractoryEmpty.getItemStack(),
|
|
PluginCore.items.refractoryWax.getItemStack(),
|
|
0.10f);
|
|
}
|
|
|
|
FluidStack ethanol = Fluids.ETHANOL.getFluid(1);
|
|
GeneratorFuel ethanolFuel = new GeneratorFuel(
|
|
ethanol,
|
|
(int) (32 * ForestryAPI.activeMode.getFloatSetting("fuel.ethanol.generator")),
|
|
4);
|
|
FuelManager.generatorFuel.put(ethanol.getFluid(), ethanolFuel);
|
|
|
|
FluidStack biomass = Fluids.BIOMASS.getFluid(1);
|
|
GeneratorFuel biomassFuel = new GeneratorFuel(
|
|
biomass,
|
|
(int) (8 * ForestryAPI.activeMode.getFloatSetting("fuel.biomass.generator")),
|
|
1);
|
|
FuelManager.generatorFuel.put(biomass.getFluid(), biomassFuel);
|
|
}
|
|
|
|
public static class MissingFluidException extends RuntimeException {
|
|
|
|
private static final long serialVersionUID = -5764238838259167615L;
|
|
|
|
public MissingFluidException(String tag) {
|
|
super("Fluid '" + tag + "' was not found. Please check your configs.");
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void postInit() {
|
|
for (Fluids fluidType : Fluids.forestryFluids) {
|
|
if (fluidType.getFluid() == null && Config.isFluidEnabled(fluidType)) {
|
|
throw new MissingFluidException(fluidType.getTag());
|
|
}
|
|
}
|
|
}
|
|
|
|
public static class TextureHook {
|
|
|
|
@SubscribeEvent
|
|
@SideOnly(Side.CLIENT)
|
|
public void textureHook(TextureStitchEvent.Post event) {
|
|
if (event.map.getTextureType() == 0) {
|
|
for (Fluids fluidType : forestryFluidsWithBlocks) {
|
|
Fluid fluid = fluidType.getFluid();
|
|
Block fluidBlock = fluidType.getBlock();
|
|
if (fluid != null && fluidBlock != null) {
|
|
fluid.setIcons(fluidBlock.getBlockTextureFromSide(1), fluidBlock.getBlockTextureFromSide(2));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private static Object getTextureHook() {
|
|
return new TextureHook();
|
|
}
|
|
|
|
public static class FillBucketHook {
|
|
|
|
@SubscribeEvent
|
|
public void fillBucket(FillBucketEvent event) {
|
|
ItemStack bucket = event.current;
|
|
if (bucket == null || bucket.getItem() != Items.bucket) {
|
|
return;
|
|
}
|
|
|
|
MovingObjectPosition movingObjectPosition = event.target;
|
|
int x = movingObjectPosition.blockX;
|
|
int y = movingObjectPosition.blockY;
|
|
int z = movingObjectPosition.blockZ;
|
|
Block targetedBlock = event.world.getBlock(x, y, z);
|
|
if (targetedBlock instanceof BlockForestryFluid) {
|
|
Item filledBucket = ItemLiquidContainer.getExistingBucket(targetedBlock);
|
|
if (filledBucket != null) {
|
|
event.result = new ItemStack(filledBucket);
|
|
event.setResult(Event.Result.ALLOW);
|
|
if (!event.world.isRemote) {
|
|
event.world.setBlockToAir(x, y, z);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private static Object getFillBucketHook() {
|
|
return new FillBucketHook();
|
|
}
|
|
}
|