Fluids 1.7.10
-
Introduction
Dans ce tutoriel, vous allez apprendre à faire un fluid qui ressemblera à celà :
Pré-requis
- Créer un block
- Créer un Item
Code
Classe Principale
public static Block poisenouswaterb; public static Fluid poison; public static Item poisonbucket;
Il faudra déclarer cela dans ta classe principale,
Ensuite on va aller dans PreInit de ta classe principale et mettre :
@EventHandler public void preInit(FMLPreInitializationEvent event) { poison = new Fluid("poison").setDensity(4000).setViscosity(500).setTemperature(286).setLuminosity(10).setUnlocalizedName("poison"); //on cree notre fluid que l'on nomme poison FluidRegistry.registerFluid(poison); // on register notre fluid poison = FluidRegistry.getFluid("poison"); poisenouswaterb = new BlockFluidPoison(poison, Material.water).setBlockTextureName(Reference.MOD_ID + ":poison"); // on crée notre block GameRegistry.registerBlock(poisenouswaterb, poisenouswaterb.getUnlocalizedName().substring(5)); //puis on le register poisonbucket = new ItemBucketPoison(CiolMod.poisenouswaterb).setUnlocalizedName("poisonbucket").setCreativeTab(CreativeTabs.tabMisc).setContainerItem(Items.bucket).setTextureName(Reference.MOD_ID + ":poisonbucket"); //on definit notre sceau de poison GameRegistry.registerItem(poisonbucket , "poisonbucket "); // on register l'item FluidContainerRegistry.registerFluidContainer(FluidRegistry.getFluidStack("poison", FluidContainerRegistry.BUCKET_VOLUME), new ItemStack(ItemMod.poisonbucket), FluidContainerRegistry.EMPTY_BUCKET); }
Classe de notre block de poison :
public class BlockFluidPoison extends BlockFluidClassic { 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); } 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); } public BlockFluidPoison(Fluid fluid, Material material) { super(fluid, material); } }
La class de notre sceau :
public class ItemBucketPoison extends ItemBucket { public ItemBucketPoison(Block p_i45331_1_) { super(p_i45331_1_); } }
Les event :
Retournons dans notre class principale :
ajoutons-y :
@SubscribeEvent public void onBucketFill(FillBucketEvent event) { Block id = event.world.getBlock(event.target.blockX, event.target.blockY, event.target.blockZ); int metadata = event.world.getBlockMetadata(event.target.blockX, event.target.blockY, event.target.blockZ); if(id == this.poisenouswaterb && metadata == 0) { event.world.setBlockToAir(event.target.blockX, event.target.blockY, event.target.blockZ); if (!event.world.isRemote){ event.entityPlayer.inventory.consumeInventoryItem(Items.bucket); EntityItem itemsc = new EntityItem(event.world, event.entityPlayer.posX, event.entityPlayer.posY, event.entityPlayer.posZ, new ItemStack(this.poisonbucket, 1)); event.world.spawnEntityInWorld(itemsc); } } }
Pour terminer on va register l’event dans la class principale dans postInit :
MinecraftForge.EVENT_BUS.register(this);
Bonus
Si vous voulez ajouter des dégats à votre liquide, il suffit d’ajouter celà à la class de votre block :
public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity) { if (((entity instanceof EntityLivingBase)) && (!world.isRemote)) { ((EntityLivingBase)entity).attackEntityFrom(DamageSource.drown, 1.0F); } }
Merci d’avoir suivi mon tutoriel, si il vous à aidé n’hésitez pas a me donner 1 point positif
Si vous trouvez une erreur dans le tutoriel, merci de me le signaler
Ce tutoriel de Ciolgaming publié sur Minecraft Forge France est mis à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International
-
@Ciolgaming problème, quand on récupère le fluide avec un seau on reçois de l’eau. normal? ma classe principale : https://pastebin.com/xBEwcxUH
-
@whartokx a dit dans Fluids 1.7.10 :
A mon avis tu as oubié de register l’event, regarde le tuto sur les events
C’est un truc du genre FMLRegisterEvent.register(this);
Je suis plus ^sûr en 1.7 déso -
@Ciolgaming a dit dans Fluids 1.7.10 :
@SubscribeEvent public void onBucketFill(FillBucketEvent event) { Block id = event.world.getBlock(event.target.blockX, event.target.blockY, event.target.blockZ); int metadata = event.world.getBlockMetadata(event.target.blockX, event.target.blockY, event.target.blockZ); if(id == this.poisenouswaterb && metadata == 0) { event.world.setBlockToAir(event.target.blockX, event.target.blockY, event.target.blockZ); if (!event.world.isRemote){ event.entityPlayer.inventory.consumeInventoryItem(Items.bucket); EntityItem itemsc = new EntityItem(event.world, event.entityPlayer.posX, event.entityPlayer.posY, event.entityPlayer.posZ, new ItemStack(this.poisonbucket, 1)); event.world.spawnEntityInWorld(itemsc); } } }
en 1.8 ca marche a moitié le code pour recup bucket ne marche pas
-
Refais ton tutoriel ou alors quelqu’un le refais je n’ai pas tous compris s’il vous plait.
-
Bonsoir,
J’ai remis en forme le tutoriel (beaucoup de balise cassé dû au passage vers NodeBB), cela sera probablement mieux maintenant. -
Merci.
-
Ce message a été supprimé ! -
@robin4002 Moi aussi je récupère de l’eau et pourtant g bien tout suivi
-
Vérifies ton event FillBucketEvent
-
@robin4002 Je viens de le faire
Et tjrs rien. Tu veux mon code ?tiens ma classe principale
https://pastebin.com/cPdDV3BV -
Tu as vérifié que l’événement est bien appelé en mettant un point d’arrêt ou un print dedans ?
Et sinon un message ça suffit, inutile de spammer. Il y a l’option éditer pour ajouter du contenu à un message.
-
Et mon print il s’affichera où @robin4002 ?
-
@robin4002 Je viens de tester et quand mon event et censé sa déclencher. Il ne se passe rien
-
En effet et j’ai trouvé pourquoi, il te manque @Mod.EventHandler au-dessus de
init
etpostInit
. -
Merci Bcp !
-
@robin4002 Connais-tu une méthode pour rajouter de la vie à la place d’en enlever
? -
Donner l’effet de régénération. Ou juste appeler la méthode
setHealth
de l’entité. -
mrc
-
@robin4002 Juste comment tu add un effet ?