Bloc avec la même fonction que l'herbe
-
J’ai toujours pas compris : est-ce que tu veux rajouter un arbre ou bien un bloc qui supporte les arbres ?
mon block se trouve être “biome” de la class “BiomeBlock”-> hein ?
-
j’ai un biome qui a pour sol un biome que j’ai créé, et dans ce biome, j’aimerais avoir des arbres deja existants pouvant pousser et être généré aléatoirement sur ce bloc
-
Alors tu n’as besoin que de ré-écrire la fonction canSustainPlant pour le block qui est à la surface de ton biome
-
import fr.craftesys.craftesys.common.Mods; import net.minecraft.block.Block; import net.minecraft.block.BlockBush; import net.minecraft.block.BlockSapling; import net.minecraft.block.material.Material; import net.minecraft.init.Blocks; import net.minecraft.world.IBlockAccess; import net.minecraftforge.common.EnumPlantType; import fr.craftesys.craftesys.generation.EnumPlanType; import fr.craftesys.craftesys.generation.Plantable; import net.minecraftforge.common.IPlantable; import net.minecraftforge.common.util.ForgeDirection; public class BiomeBlock extends Block { public BiomeBlock(Material material) { super(material); } public boolean canSustainPlant(IBlockAccess world, int x, int y, int z, ForgeDirection direction, Plantable plantable) { boolean plantType = plantable.getPlantable(world, x, y + 1, z)== EnumPlanType.Biome ; return plantType; } }donc uniquement ça ??
-
Pas besoin de créer un booléen si c’est pour le retourner juste après :
return plantable.getPlantable(world, x, y + 1, z)== EnumPlanType.Biome;Après tout dépend de la condition que tu veux mais juste ça suffit
-
voila ce que j’ai
class BiomeBlock ```java
package fr.craftesys.craftesys.blocs;import fr.craftesys.craftesys.common.Mods;
import net.minecraft.block.Block;
import net.minecraft.block.BlockBush;
import net.minecraft.block.BlockSapling;
import net.minecraft.block.material.Material;
import net.minecraft.init.Blocks;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.common.EnumPlantType;
import fr.craftesys.craftesys.generation.EnumPlanType;
import fr.craftesys.craftesys.generation.Plantable;
import net.minecraftforge.common.IPlantable;
import net.minecraftforge.common.util.ForgeDirection;public class BiomeBlock extends Block
{public BiomeBlock(Material material) {
super(material);
}
public boolean canSustainPlant(IBlockAccess world, int x, int y, int z, ForgeDirection direction,
Plantable plantable) {return plantable.getPlantable(world, x, y + 1, z)== EnumPlanType.Biome;
}
}class Plantable : ```java package fr.craftesys.craftesys.generation; import net.minecraft.block.Block; import net.minecraft.world.IBlockAccess; import net.minecraftforge.common.EnumPlantType; public interface Plantable { public EnumPlanType getPlantable(IBlockAccess world, int x, int y, int z); public Block getPlant(IBlockAccess world, int x, int y, int z); public int getPlantMeta(IBlockAccess world, int x, int y, int z); }class EnumPlanType ```java
package fr.craftesys.craftesys.generation;public enum EnumPlanType {
Biome,
}mais ça veut toujours pas -
Après plusieurs tests, rien ne change …
-
Normal, je suppose que tu ne sais pas ce que tu fais ? Pourquoi créer une classe Plantable et un EnumPlantType, le principe d’une fonction et d’être générale, ici tu ne ré-écris pas la fonction de Minecraft puisque ce ne sont pas les bons paramètres : supprime ces 2 classes inutiles, ensuite supprime ta fonction et fait Alt + shift + S puis Override/Implement methods et trouve la fonction canSustainPlant, une fois ça fait tu devrais voir l’annotation @Override apparaître au-dessus de ta fonction, il ne faut jamais la retirer (si eclipse te demande de la retirée c’est que tu as modifié le nom ou les paramètres de ta fonction). Une fois que tout ça est fait tu peux mettre ton code dedans
-
je comprend ce que tu veux dire, mais le problème c’est que, si je mets cela :
@Override
public boolean canSustainPlant(IBlockAccess world, int x, int y, int z, ForgeDirection direction,
IPlantable plantable) {if (plantable == Blocks.sapling && this == Blocks.sapling)
{
return plantable.getPlant(world, x, y + 1, z)== EnumPlantType.Biome;}
return super.canSustainPlant(world, x, y, z, direction, plantable);
}en suivant ce que tu me dis, le “Biome” n’est pas reconnu car il n’existe pas dans le EnumPlantType de base.
-
Je crois que l’on peut utiliser une fonction du EnumHelper de Forge qui ajoute des entrées à lenum souhait (via réflexion), il faut refzrder de ce côté.
Envoyé de mon RAINBOW LITE 4G en utilisant Tapatalk
-
C’est normal il existe pas, pourquoi tu veux mettre cette valeur là ?
-
bah c’est pour ajouter mon bloc, que la pousse d’arbre puisse se poser sur mon bloc
-
mais juste, le EnumHelper, ce n’est pas pour les armures et outils ?
-
Tu peux faire avec toutes les enums du jeu (en 1.8.9 en tout cas).
-
et tu sais à quoi correspond le enums pour ce type de choses ?
-
j’ai réussi a faire, et pour faire des arbres vraiment géant, j’utilise cette fonction du coup ? :
public WorldGenerator getRandomWorldGenForTrees(Random par1Random)
{
return (WorldGenerator)(par1Random.nextInt(50) == 0 ? new WorldGenTrees(false, 20, 2, 2, false) : (par1Random.nextInt(40) == 0 ? this.worldGeneratorBigTree : new WorldGenTrees(false, 20, 0, 0, false)));
} -
Oui c’est cette fonction, avec ce que tu as fait là, tu auras une chance sur 40 d’en avoir, donc pour tester tu peux augementer la probabilité.
-
oui j’avais aussi mit 72 a la palce de 20, mais ça ne marche pas
ils sont pas aussi grand… et 2 à la place de 40 -
worldGeneratorBigTree correspond à quoi ?
-
c’est dans la fonction de base de minecraft, mais quand je fais fait ctrl + espace je ne retrouve pas cette fonction :s