I've been following http://www.minecraftforge.net/wiki/Create_a_Fluid yet right clicking my fluids' blocks with a bucket returns a water bucket.
Fluids' block class (they're all the same except the names changed):
package com.hlaaftana.mods.OlivicBlocks.blocks;
import com.hlaaftana.mods.OlivicBlocks.help.Reference;
import com.hlaaftana.mods.OlivicBlocks.init.ModFluids;
import com.hlaaftana.mods.OlivicBlocks.tabs.ModTabs;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.fluids.BlockFluidBase;
import net.minecraftforge.fluids.BlockFluidClassic;
import net.minecraftforge.fluids.BlockFluidFinite;
import net.minecraftforge.fluids.FluidStack;
public class BlockFluidOliveOil extends BlockFluidClassic {
public BlockFluidOliveOil(){
super(ModFluids.oilOlive, Material.water);
setBlockName("oilOlive");
setBlockTextureName(Reference.MODID + ":" + getUnlocalizedName().substring(5));
setCreativeTab(ModTabs.tabOlivic);
}
@SideOnly(Side.CLIENT)
protected IIcon stillIcon;
@SideOnly(Side.CLIENT)
protected IIcon flowingIcon;
@Override
public IIcon getIcon(int side, int meta){
return (side == 0 || side == 1)? stillIcon : flowingIcon;
}
@SideOnly(Side.CLIENT)
@Override
public void registerBlockIcons(IIconRegister register){
stillIcon = register.registerIcon(Reference.MODID + ":oilOlive_flowing");
flowingIcon = register.registerIcon(Reference.MODID + ":oilOlive_flowing");
}
@Override
public boolean canDisplace(IBlockAccess world, int x, int y, int z){
if (world.getBlock(x, y, z).getMaterial().isLiquid()) return false;
return super.canDisplace(world, x, y, z);
}
@Override
public boolean displaceIfPossible(World world, int x, int y, int z) {
if (world.getBlock(x, y, z).getMaterial().isLiquid()) return false;
return super.displaceIfPossible(world, x, y, z);
}
}
BucketHandler:
package com.hlaaftana.mods.OlivicBlocks.handlers;
import java.util.HashMap;
import java.util.Map;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.player.FillBucketEvent;
import com.hlaaftana.mods.OlivicBlocks.init.ModBlocks;
import com.hlaaftana.mods.OlivicBlocks.init.ModItems;
import cpw.mods.fml.common.eventhandler.Event.Result;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
public class BucketHandler {
public static BucketHandler INSTANCE = new BucketHandler();
public Map<Block, Item> buckets = new HashMap<Block, Item>();
private BucketHandler() {
BucketHandler.INSTANCE.buckets.put(ModBlocks.tar, ModItems.bucketTar);
BucketHandler.INSTANCE.buckets.put(ModBlocks.creosote, ModItems.bucketCreosote);
BucketHandler.INSTANCE.buckets.put(ModBlocks.oilOlive, ModItems.bucketOliveOil);
BucketHandler.INSTANCE.buckets.put(ModBlocks.oilOlive, ModItems.bottleOliveOil);
MinecraftForge.EVENT_BUS.register(BucketHandler.INSTANCE);
}
@SubscribeEvent
public void onBucketFill(FillBucketEvent event) {
ItemStack result = fillCustomBucket(event.world, event.target);
if (result == null)
return;
event.result = result;
event.setResult(Result.ALLOW);
}
private ItemStack fillCustomBucket(World world, MovingObjectPosition pos) {
Block block = world.getBlock(pos.blockX, pos.blockY, pos.blockZ);
Item bucket = buckets.get(block);
if (bucket != null && world.getBlockMetadata(pos.blockX, pos.blockY, pos.blockZ) == 0) {
world.setBlockToAir(pos.blockX, pos.blockY, pos.blockZ);
return new ItemStack(bucket);
} else
return null;
}
}
Custom buckets' register:
package com.hlaaftana.mods.OlivicBlocks.init;
import net.minecraft.init.Items;
import net.minecraft.item.*;
import com.hlaaftana.mods.OlivicBlocks.init.ModArmory;
import com.hlaaftana.mods.OlivicBlocks.help.RegisterHelper;
import com.hlaaftana.mods.OlivicBlocks.items.*;
import cpw.mods.fml.common.IFuelHandler;
public class ModItems{
*A bunch of items*
public static Item bucketTar = new OlivicBlocksBucketItem("Tar", ModBlocks.tar);
public static Item bucketOliveOil = new OlivicBlocksBucketItem("OliveOil", ModBlocks.oilOlive);
public static Item bucketCreosote = new OlivicBlocksBucketItem("Creosote", ModBlocks.creosote);
public static void init(){
*A bunch of items*
RegisterHelper.registerItem(bucketOliveOil);
RegisterHelper.registerItem(bucketTar);
RegisterHelper.registerItem(bucketCreosote);
RegisterHelper.registerFluidContainer(ModFluids.tar, bucketTar);
RegisterHelper.registerFluidContainer(ModFluids.oilOlive, bucketOliveOil);
RegisterHelper.registerFluidContainer(ModFluids.creosote, bucketCreosote);
RegisterHelper.registerFluidContainer(ModFluids.oilOlive, bottleOliveOil);
The RegisterHelper class:
package com.hlaaftana.mods.OlivicBlocks.help;
import cpw.mods.fml.common.registry.GameRegistry;
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.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidContainerRegistry;
import net.minecraftforge.fluids.FluidRegistry;
public class RegisterHelper {
public static void registerBlock(Block block){
GameRegistry.registerBlock(block, block.getUnlocalizedName().substring(5));
}
public static void registerItem(Item item){
GameRegistry.registerItem(item, item.getUnlocalizedName().substring(5));
}
public static void registerFluid(Fluid fluid){
FluidRegistry.registerFluid(fluid);
}
public static void registerFluidContainer(Fluid fluid, Item bucket){
FluidContainerRegistry.registerFluidContainer(fluid, new ItemStack(bucket), new ItemStack(Items.bucket));
}
}
OlivicBlocksBucketItem:
package com.hlaaftana.mods.OlivicBlocks.items;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBucket;
import com.hlaaftana.mods.OlivicBlocks.help.Reference;
import com.hlaaftana.mods.OlivicBlocks.tabs.ModTabs;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class OlivicBlocksBucketItem extends ItemBucket{
public OlivicBlocksBucketItem(String name, Block fluid){
super(fluid);
setCreativeTab(ModTabs.tabOlivic);
setUnlocalizedName("bucket" + name);
setContainerItem(Items.bucket);
}
@SideOnly(Side.CLIENT)
@Override
public void registerIcons(IIconRegister par1IconRegister){
itemIcon = par1IconRegister.registerIcon(Reference.MODID + ":" + getUnlocalizedName().substring(5));
}
}
Main class:
package com.hlaaftana.mods.OlivicBlocks;
import net.minecraft.item.ItemStack;
import com.hlaaftana.mods.OlivicBlocks.crafting.Recipes;
import com.hlaaftana.mods.OlivicBlocks.generation.OlivicBlocksWorldGen;
import com.hlaaftana.mods.OlivicBlocks.generation.VanillaChestLootGen;
import com.hlaaftana.mods.OlivicBlocks.handlers.ConfigHandler;
import com.hlaaftana.mods.OlivicBlocks.handlers.FuelHandler;
import com.hlaaftana.mods.OlivicBlocks.help.LogHelper;
import com.hlaaftana.mods.OlivicBlocks.help.Reference;
import com.hlaaftana.mods.OlivicBlocks.init.ModBlocks;
import com.hlaaftana.mods.OlivicBlocks.init.ModFluids;
import com.hlaaftana.mods.OlivicBlocks.init.ModItems;
import com.hlaaftana.mods.OlivicBlocks.init.OreDictionaryRegister;
import cpw.mods.fml.common.IFuelHandler;
import cpw.mods.fml.common.Mod;
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.registry.GameRegistry;
@Mod(modid = Reference.MODID, name = Reference.NAME, version = Reference.VERSION)
public class OlivicBlocks {
OlivicBlocksWorldGen eventWorldGen = new OlivicBlocksWorldGen();
IFuelHandler OBFuelHandler = new FuelHandler();
@Mod.EventHandler
public void preInit(FMLPreInitializationEvent event){
LogHelper.info("Pre-init starting, registering fluids");
ModFluids.init();
LogHelper.info("Fluids registered, registering items");
ModItems.init();
LogHelper.info("Items registered, registering blocks");
ModBlocks.init();
LogHelper.info("Blocks registered, initalizing world generator");
GameRegistry.registerWorldGenerator(this.eventWorldGen, 0);
LogHelper.info("World generator initialized, registering OreDict entries");
OreDictionaryRegister.registerOres();
LogHelper.info("OreDict entries registered, checking/creating config");
ConfigHandler.initProps(event.getModConfigurationDirectory());
LogHelper.info("Config created/checked, adding loot");
VanillaChestLootGen.init();
LogHelper.info("Loot added");
LogHelper.info("Pre-init done");
}
@Mod.EventHandler
public void Init(FMLInitializationEvent event){
LogHelper.info("Init starting, registering fuels");
GameRegistry.registerFuelHandler(OBFuelHandler);
LogHelper.info("Fuels registered, adding recipes");
Recipes.init();
LogHelper.info("Recipes added");
LogHelper.info("Init done");
}
@Mod.EventHandler
public void postInit(FMLPostInitializationEvent event){
LogHelper.info("Post-init starting, scanning environment");
CheckAround.verifyEnvironmentSanity();
LogHelper.info("Environment scanned");
LogHelper.info("Post-init done");
}
}