Résolu Transformer un item en un autre comme les fioles 2
-
Dans un précédent topic, j’ai demander comment transformer un item en un autre comme les fioles ( Wauh , le titre… ). Mais je voudrait que le même item peut se transformer en différent, selon on rightclick sur différents bloc ( Pas français déso )
pour l’instant, mon item se transforme en bouteille d’air quand on click dans le vide. J’aimerai que lorsque l’on clique sur de la lave, on obtient une bouteille de lave. A l’avenir, je vodurais également crer uen bouteille de fumée obtenable en right click’ant surr un four AlluméClasse actuelle
package eryah.usefulthings.init; import net.minecraft.block.material.Material; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.stats.StatList; import net.minecraft.util.BlockPos; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; import net.minecraftforge.fml.common.registry.GameRegistry; import eryah.usefulthings.Reference; import eryah.usefulthings.UsefulthingsMod; public class BottleHerm extends Item { public static Item bottleherm; public static void init(){ bottleherm = new BottleHerm().setUnlocalizedName("bottleherm").setCreativeTab(UsefulthingsMod.UTTab); } public static void register() { GameRegistry.registerItem(bottleherm, bottleherm.getUnlocalizedName().substring(5)); } public static void registerRenders() { registerRender(bottleherm); } public static void registerRender(Item item) { Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(item, 0, new ModelResourceLocation(Reference.MOD_ID + ":" + item.getUnlocalizedName().substring(5), "inventory")); } @Override public ItemStack onItemRightClick(ItemStack itemStackIn, World worldIn, EntityPlayer playerIn) { MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(worldIn, playerIn, true); if (movingobjectposition == null) { --itemStackIn.stackSize; playerIn.triggerAchievement(StatList.objectUseStats[Item.getIdFromItem(this)]); if (itemStackIn.stackSize <= 0) { return new ItemStack(AirBottle.air_bottle); } if (!playerIn.inventory.addItemStackToInventory(new ItemStack(AirBottle.air_bottle))) { playerIn.dropPlayerItemWithRandomChoice(new ItemStack(AirBottle.air_bottle, 1, 0), false); } } return itemStackIn; } }
-
public ItemStack onItemRightClick(ItemStack itemStackIn, World worldIn, EntityPlayer playerIn) { MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(worldIn, playerIn, true); if(movingobjectposition == null) { –itemStackIn.stackSize; playerIn.triggerAchievement(StatList.objectUseStats[Item.getIdFromItem(this)]); if(itemStackIn.stackSize <= 0) { return new ItemStack(AirBottle.air_bottle); } if(!playerIn.inventory.addItemStackToInventory(new ItemStack(AirBottle.air_bottle))) { playerIn.dropPlayerItemWithRandomChoice(new ItemStack(AirBottle.air_bottle, 1, 0), false); } } else if(movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { Block block = worldIn.getBlockState(movingobjectposition.getBlockPos()).getBlock(); if(block == Blocks.lava || Blocks.flowing_lava) // retire || Blocks.flowing_lava si tu ne veux que prendre en compte les sources de lave { –itemStackIn.stackSize; playerIn.triggerAchievement(StatList.objectUseStats[Item.getIdFromItem(this)]); if(itemStackIn.stackSize <= 0) { return new ItemStack(item voulu); } if(!playerIn.inventory.addItemStackToInventory(new ItemStack(item voulu))) { playerIn.dropPlayerItemWithRandomChoice(new ItemStack(item voulu), false); } worldIn.setBlockToAir(movingobjectposition.getBlockPos()); // optionnel, remplace la lave par de l'air } else if(block == un autre bloc) { //une autre action } } return itemStackIn; }
Rien de compliqué.
-
Ok merci beaucoup
Je lance mon client
Javais pas vu , je n’avais aps fais les import
Mais j’ai une erreur après import sur
block == Blocks.lava || Blocks.flowing_lava
The operator || is undefined for the argument type(s) boolean, BlockDynamicLiquid
Je ne pense pas que les barres verticales sont acceptés comme spérations -
Autant pour moi, la bonne syntaxe est :
block == Blocks.lava || block == Blocks.flowing_lavaEt || c’est ou, tu devrais le savoir …
-
je n’ai pas encore suivi de cours avancé sur java, juste les premiers. Je prend l’avion pendent 11h le 18, je vais faire presque que sa pendant le trajet ( Je vais essayer en tout cas )
Resultats : Concluant
Mais, même avec le Blocks.flowing_lava, impossible d’obtenir mon item en right click un bloc de lave ( non source )
Mais ce n’est pas grave, avec les fioles de base, tu peut pas remplir la fiole avec de l’eau qui coule -
yop,
parce que le block flowing lava n’est pas vraiment un block donc tu peut pas le right click il est “considéré comme de l’air” dans le jeu
-
Ok, THX pour le renseignement, je pensais que c’était un bloc avec énormément de metadata moi
Envoyé de mon SM-G357FZ en utilisant Tapatalk