Posted August 13, 201312 yr If anyone knows how, could someone make an in depth tutorial on the new Fluid system Thanks I really appreciate it The only reason Im asking is because all the other tutorials, aren't in depth, and are useless to beginners, so please help. I have the fluid blocks, I just need to know how to make them create source blocks, and how to make a bucket pick them up and place them. BlockFluid class package kakarotvg.omega.blocks; import kakarotvg.omega.LiquidHandler; import kakarotvg.omega.Reference; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.util.Icon; import net.minecraft.world.IBlockAccess; import net.minecraftforge.fluids.BlockFluidClassic; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class BlockDarkness extends BlockFluidClassic { public BlockDarkness(int id) { super(id, LiquidHandler.Darkness, Material.water); } @SideOnly(Side.CLIENT) @Override public void registerIcons(IconRegister register) { this.blockIcon = register.registerIcon(Reference.MOD_ID + ":" + (this.getUnlocalizedName().substring(5))); } @Override public int colorMultiplier(IBlockAccess iblockaccess, int x, int y, int z) { return 0x1C1C1C; // HEX color code } } Fluid Class package kakarotvg.omega.blocks; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; public class VgFluid extends Fluid { public VgFluid(String fluidName) { super("Darkness"); setDensity(10); setViscosity(1000); FluidRegistry.registerFluid(this); } } EDIT: got the bucket to place down the liquid, but still cant pick it up it keeps giving back a water bucket package kakarotvg.omega.items; import kakarotvg.omega.ItemHandler; import kakarotvg.omega.LiquidHandler; import kakarotvg.omega.Reference; import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.item.ItemBucket; import net.minecraft.item.ItemStack; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; import net.minecraftforge.event.Event.Result; import net.minecraftforge.event.EventPriority; import net.minecraftforge.event.ForgeSubscribe; import net.minecraftforge.event.entity.player.FillBucketEvent; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class VgBucket extends ItemBucket { private String itemName; @SideOnly(Side.CLIENT) @Override public void registerIcons(IconRegister register) { this.itemIcon = register.registerIcon(Reference.MOD_ID + ":" + (this.getUnlocalizedName().substring(5))); } public VgBucket(int id, int par1, String name) { super(id, LiquidHandler.Darknessliquid.blockID); this.itemName = name; this.setUnlocalizedName(name); } @ForgeSubscribe(priority = EventPriority.NORMAL) public void FillBucket(FillBucketEvent event) { ItemStack result = attemptFill(event.world, event.target); if (result != null) { event.result = result; event.setResult(Result.ALLOW); } } private ItemStack attemptFill(World world, MovingObjectPosition p) { int id = world.getBlockId(p.blockX, p.blockY, p.blockZ); if (id == LiquidHandler.Darknessliquid.blockID) { // checks that it is a source block if (world.getBlockMetadata(p.blockX, p.blockY, p.blockZ) == 0) { // Remove the fluid block world.setBlock(p.blockX, p.blockY, p.blockZ, 0); // return the fill bucket here return new ItemStack(ItemHandler.darknessbucket); } } return null; } } if (You.likescoding == false){ You.goaway; }
August 14, 201312 yr i was about to reply to say have you tried mazetar's tute... but i see you have... i've only got that far myself... haven't done buckets yet, i just /gave myself the block [and now i must go to work... ]
August 14, 201312 yr Author I got the bucket working and everything I just can't figure out why It won't return the new bucket instead of the water bucket if (You.likescoding == false){ You.goaway; }
August 14, 201312 yr Override tryPlaceContainedLiquid(World par1World, int par2, int par3, int par4) of ItemBucket ?
August 14, 201312 yr Author That actually made so I couldn't place the liquid anymore, I just need to get it to give me the new filled bucket, instead of the water bucket. if (You.likescoding == false){ You.goaway; }
August 14, 201312 yr I'm using events for that, if you aren't familar with events you should read up on them first. Here's the event handler I'm using to let vanilla buckets pick up my custom fluid. https://github.com/mazetar/MLT/blob/master/com/mazetar/mazLearnedThis/handlers/EventHandlerMaz.java If you guys dont get it.. then well ya.. try harder...
August 14, 201312 yr Author Got it working Had to look at a comibination of another page that was posted back in 1.5.2 as well as the buildcraft code, which actually didn't help anything. bucket class package kakarotvg.omega.items; import kakarotvg.omega.ItemHandler; import kakarotvg.omega.LiquidHandler; import kakarotvg.omega.Reference; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemBucket; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumMovingObjectType; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.Event.Result; import net.minecraftforge.event.Event; import net.minecraftforge.event.EventPriority; import net.minecraftforge.event.ForgeSubscribe; import net.minecraftforge.event.entity.player.FillBucketEvent; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class VgBucket extends ItemBucket { private String itemName; private int isFull; @SideOnly(Side.CLIENT) @Override public void registerIcons(IconRegister register) { this.itemIcon = register.registerIcon(Reference.MOD_ID + ":" + (this.getUnlocalizedName().substring(5))); } public VgBucket(int id, int par1, String name) { super(id, par1); this.itemName = name; this.setUnlocalizedName(name); } @ForgeSubscribe public void onBucketFill(FillBucketEvent event) { ItemStack result = fillCustomBucket(event.world, event.target); if (result == null) return; event.result = result; event.setResult(Result.ALLOW); } public ItemStack fillCustomBucket(World world, MovingObjectPosition pos) { int blockID = world.getBlockId(pos.blockX, pos.blockY, pos.blockZ); if ((blockID == LiquidHandler.Darknessliquid.blockID) && world.getBlockMetadata(pos.blockX, pos.blockY, pos.blockZ) == 0) { world.setBlock(pos.blockX, pos.blockY, pos.blockZ, 0); return new ItemStack(ItemHandler.darknessbucket); } else return null; } } fluid class package kakarotvg.omega.blocks; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; public class VgFluid extends Fluid { public VgFluid(String fluidName) { super(fluidName); setDensity(10); setViscosity(1000); FluidRegistry.registerFluid(this); } } liquid class package kakarotvg.omega.blocks; import kakarotvg.omega.LiquidHandler; import kakarotvg.omega.Reference; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.util.Icon; import net.minecraft.world.IBlockAccess; import net.minecraftforge.fluids.BlockFluidClassic; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class BlockDarkness extends BlockFluidClassic { public BlockDarkness(int id) { super(id, LiquidHandler.Darkness, Material.water); } @SideOnly(Side.CLIENT) @Override public void registerIcons(IconRegister register) { this.blockIcon = register.registerIcon(Reference.MOD_ID + ":" + (this.getUnlocalizedName().substring(5))); } @Override public int colorMultiplier(IBlockAccess iblockaccess, int x, int y, int z) { return 0x1C1C1C; // HEX color code } } if (You.likescoding == false){ You.goaway; }
August 14, 201312 yr Author Main class package kakarotvg.omega; import kakarotvg.omega.blocks.VgFluid; import kakarotvg.omega.items.VgBucket; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.common.Configuration; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fluids.FluidContainerRegistry.FluidContainerData; import net.minecraftforge.fluids.FluidRegistry; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.Mod.Instance; import cpw.mods.fml.common.SidedProxy; 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.network.NetworkMod; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; @Mod(modid = Reference.MOD_ID, name = Reference.MOD_N, version = Reference.MOD_V) @NetworkMod(serverSideRequired = false, clientSideRequired = true) public class Omega { @Instance(Reference.MOD_N) public static Omega instance; @SidedProxy(clientSide = "kakarotvg.omega.client.ClientProxy", serverSide = "kakarotvg.omega.CommonProxy") public static CommonProxy proxy; @EventHandler public void preInit(FMLPreInitializationEvent event) { MinecraftForge.EVENT_BUS.register(new VgBucket(0, 0, null)); Configuration config = new Configuration(event.getSuggestedConfigurationFile()); config.load(); LiquidHandler.configurefluids(config); BlockHandler.configureBlocks(config); ItemHandler.configureItems(config); ToolHandler.configureTools(config); ArmorHandler.configreArmor(config); CropHandler.configurecrops(config); config.save(); LiquidHandler.registerfluids(new GameRegistry()); LiquidHandler.addNames(new LanguageRegistry()); BlockHandler.registerBlocks(new GameRegistry()); BlockHandler.setNames(new LanguageRegistry()); BlockHandler.setHarvestlevel(new MinecraftForge()); ItemHandler.registerItems(new GameRegistry()); ItemHandler.setNames(new LanguageRegistry()); CreativetabHandler.setNames(new LanguageRegistry()); ToolHandler.registerItem(new GameRegistry()); ToolHandler.setNames(new LanguageRegistry()); ToolHandler.setToolClass(new MinecraftForge()); ArmorHandler.registerArmor(new GameRegistry()); ArmorHandler.setNames(new LanguageRegistry()); CraftingHandler.addCrafting(new GameRegistry()); CraftingHandler.addSmelting(new GameRegistry()); CropHandler.registercrops(new GameRegistry()); CropHandler.addnames(new LanguageRegistry()); GameRegistry.registerWorldGenerator(new WorldGen()); FluidContainerRegistry.registerFluidContainer(LiquidHandler.Darkness, new ItemStack(ItemHandler.darknessbucket, 1, 1), new ItemStack(Item.bucketEmpty)); // loads the init method of Commonproxy proxy.init(); MinecraftForge.addGrassSeed(new ItemStack(CropHandler.darknessseeds), 10); MinecraftForge.addGrassSeed(new ItemStack(CropHandler.lightseeds), 10); } @EventHandler public void Init(FMLInitializationEvent event) { } @EventHandler public void postInit(FMLPostInitializationEvent event) { } } Item handler package kakarotvg.omega; import kakarotvg.omega.items.VgBucket; import kakarotvg.omega.items.VgItem; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.common.Configuration; import net.minecraftforge.fluids.FluidContainerRegistry; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; public class ItemHandler { // buckets public static Item darknessbucket; public static void configureItems(Configuration config) { // buckets darknessbucket = new VgBucket(config.get("Liquid IDs", "Darkness Bucket", 9059).getInt(), LiquidHandler.Darknessliquid.blockID, "darknessbucket").setCreativeTab(CreativetabHandler.vgtab2).setContainerItem(Item.bucketEmpty); } public static void registerItems(GameRegistry registry) { // buckets registry.registerItem(darknessbucket, "darknessbucket"); } public static void setNames(LanguageRegistry registry) { // buckets registry.addName(darknessbucket, "Darkness bucket"); } } if (You.likescoding == false){ You.goaway; }
August 14, 201312 yr event.setResult(Result.ALLOW); This line says you are allowing default bucket result. I don't think you should.
August 14, 201312 yr Author Everything I've seen shows that, plus it works fine. if (You.likescoding == false){ You.goaway; }
August 14, 201312 yr Everything I've seen shows that, plus it works fine. Then you didn't see my link above If you guys dont get it.. then well ya.. try harder...
August 14, 201312 yr Author No I did and it also has, event.setResult(Result.ALLOW); if (You.likescoding == false){ You.goaway; }
August 14, 201312 yr Author New Question, How do you make the fluid create source blocks. if (You.likescoding == false){ You.goaway; }
August 15, 201312 yr also, you have @Instance(Reference.MOD_N) rather than your Reference.MOD_ID ... i'm taking a note from gotolink's comments on other threads here that and http://www.minecraftforge.net/wiki/Basic_Modding @Instance Base Mod classes are Singletons. This is the object reference to your class that Forge uses. Make sure that the argument is the modid in @Mod. Otherwise, it'll default to the empty string, and cause problems with any mod that also does that. of course, you may have the same value for both constants, but if you don't - or change one of them in the future to be more wordy, then <bork>
August 15, 201312 yr Author MOD_N is the name of the Actual mod, MOD_ID is the id of the mod, as well as the name of the folder the textures are in. if (You.likescoding == false){ You.goaway; }
August 16, 201312 yr exactly... and you need to be using the ID in the @Instance, but you're not. @Instance(Reference.MOD_N) public static Omega instance; is wrong.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.