Résolu Drop des blocs et modification d'un harvestlevel
-
Bonjour. Alors voila, ça fait un moment que je code un mod (je ne suis qu’un débutant) et j’aimerais changer le drop d’un bloc par exemple que le minerais de sapphir drop du sapphir :).
Mais j’ai aussi un autre problème j’aimerais changer l’harvestlevel qui ne soit plus limité à 1-2-3. Par exemple l’harvestlevel est une pioche de jade. Si quelqu’un à une voire les deux solutions poster les.
Merci d’avance.
Et j’ai oublier de préciser que pour la pioche de jade ça serait setHarvestLevel(“pickaxe”, 4); voila tout
-
c’est très simple et rapide regarde ici :
mon githuboublie pas d’enregistrer l’event :
MinecraftForge.EVENT_BUS.register(new BlockEvent());
Regarde dans l’event pour le harvestlevel tu devrais trouver ce que tu cherche
-
Pour le drop de l’item j’ai trouvé mais ce que tu viens de me donner je ne comprends pas trop c’est pour changer le harvestlevel ?
-
Oui c’est pour créer une classe event de bloc pour ainsi rajouter un harvest level
-
Si je veux ajouter une harvestlevel je dois prendre sont github et le mettre dans ma classe du minerai ?
-
Oue mais faudrat le modifier
-
par exemple quesque je devrais modifier si je veux que l’harvestLevel 4 soit la picohe en jade :
@SubscribeEvent public void onBlockDrop(HarvestDropsEvent event) { if(Properties.activeSpecialsDrops) { if(event.block == Blocks.iron_ore) { event.drops.clear(); event.drops.add(new ItemStack(ModItemsList.dusts, event.world.rand.nextInt(Properties.dropIron), 0)); } if(event.block == Blocks.gold_ore) { event.drops.clear(); event.drops.add(new ItemStack(ModItemsList.dusts, event.world.rand.nextInt(Properties.dropGold), 1)); } } }
-
Cette méthode te donne le harvestLevel ensuite tu testes les valeurs valeur :
int harvestLevel = event.world.getBlock(event.x, event.y, event.z).getHarvestLevel(event.world.getBlockMetadata(event.x, event.y, event.z));
Utilise cette méthode pour le harvestLevel :
public void setHarvestLevel(String toolClass, int level) { for (int m = 0; m < 16; m++) setHarvestLevel(toolClass, level, m); }
Pour le HarvestLevel :
if(event.block == Blocks.iron_ore) { event.drops.clear(); event.drops.add(new ItemStack(ModItemsList.dusts, event.world.rand.nextInt(Properties.dropIron), 0)); }
tu modifie le bloc et l’item qui drop
-
Je dois le mettre dans la classe principale ou dans une autre ?
-
tout va dans la class de l’event sauf le setHarvestLevel qui va dans la class du block
-
Phenix, il cherche à modifier le drop de ces propres blocs, il n’a pas besoin d’un event.
Pour le bloc :
package fr.minecraftforgefrance.tutoriel.common; import java.util.Random; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.item.Item; public class BlockTutoriel extends Block { protected BlockTutoriel(Material material) { super(material); this.setHarvestLevel("pickaxe", 4); // défini le niveau harvest sur 4 } public Item getItemDropped(int metadata, Random rand, int fortune) { return ModTutoriel.itemTutoriel; // drop un item tutoriel } }
Pour ta pioche :
package fr.minecraftforgefrance.tutoriel.common; import net.minecraft.item.ItemPickaxe; import net.minecraft.item.ItemStack; public class ItemTutoPickaxe extends ItemPickaxe { protected ItemTutoPickaxe(ToolMaterial material) { super(material); this.setHarvestLevel("pickaxe", 4); // harvest niveau 4 } public boolean getIsRepairable(ItemStack input, ItemStack repair) { if(repair.getItem() == ModTutoriel.itemTutoriel) { return true; } return false; } }
-
Cette technique ne marche pas non plus pourtant elle me semblait plus favorable à moins que je me sois trompé
Pour la pioche :
package fr.craftandfight.serveur.common; import net.minecraft.item.ItemPickaxe; import net.minecraft.item.ItemStack; public class JadePickaxe extends ItemPickaxe { protected JadePickaxe(ToolMaterial material) { super(material); this.setHarvestLevel("pickaxe", 4); // harvest niveau 4 } public boolean getIsRepairable(ItemStack input, ItemStack repair) { if(repair.getItem() == ModCraftAndFight.jade) { return true; } return false; } }
et pour le bloc :
package fr.craftandfight.serveur.common; import java.util.Random; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.item.Item; public class RainbowOre extends Block { protected RainbowOre(Material material) { super(material); this.setHarvestLevel("Pickaxe", 4); } @Override public Item getItemDropped(int metadata, Random random, int fortune) { return ModCraftAndFight.rainbowPearl; } }
quelqu’un aurait la solution à mon problème svp ?
-
met les balise on pourra mieux lire
-
this.setHarvestLevel(“jadePickaxe”, 4);
Juste pickaxe, pas jadePickaxe -
re désolé je devais y aller je vais tester ça de suite
ça ne marche pas même avec pickaxe
-
Tu peux détailler ? Tu arrive toujours a casser avec les autres pioches ou pas ?
-
Alors je peux casser avec les autres pioches et je drop toujours une “rainbowPearl”
Mais ça va beacoup plus vite avec la pioche en jade
Sinon envoie moi ton skype en mp et je t’ajouterai pour que tu m’aides
Robin tu peux m’accepter skype stp ?
-
Tout est normal sauf le fait que le bloc drop avec une mauvaise pioche. Normalement il devrait pas droppé si tu casse avec une pioche inférieur à 4.
-
Ben je suis d’accord mais ça veut dire que nous n’arrivons pas au résultat attendu
-
Problème réglé, ça venant de la majuscule à Pickaxe. Il ne dois pas en avoir :
this.setHarvestLevel(“pickaxe”, 4);