Ajouter un élément à une structure d'un village



  • Salut,

    Je me remets gentiment au modding et pour commencer j'ai fait rapidement une nouvelle structure dans un village.

    En reprenant le code de  StructureVillagePieces.Village.House1 dans mon fichier Component, je génère par exemple ici un cube 4x4 de blocks de diamants:

    package net.dylem.styx.world;
    
    import java.util.List;
    import java.util.Random;
    
    import net.minecraft.init.Blocks;
    import net.minecraft.util.EnumFacing;
    import net.minecraft.world.World;
    import net.minecraft.world.gen.structure.StructureBoundingBox;
    import net.minecraft.world.gen.structure.StructureComponent;
    import net.minecraft.world.gen.structure.StructureVillagePieces;
    
    public class ComponentHouseCellar extends StructureVillagePieces.Village {
    
    public ComponentHouseCellar() {
    
    }
    
    public ComponentHouseCellar(StructureVillagePieces.Start start, int type, Random rand, StructureBoundingBox sbb, EnumFacing facing) {
    
           super(start, type);
           this.setCoordBaseMode(facing);
           this.boundingBox = sbb;
       }
    
    public static ComponentHouseCellar createPiece(StructureVillagePieces.Start start, List <structurecomponent>comps, Random rand, int p1, int p2, int p3, EnumFacing facing, int p5){
    
    StructureBoundingBox structureboundingbox = StructureBoundingBox.getComponentToAddBoundingBox(p1, p2, p3, 0, 0, 0, 3, 3, 3, facing);
           return canVillageGoDeeper(structureboundingbox) && StructureComponent.findIntersecting(comps, structureboundingbox) == null ? new ComponentHouseCellar(start, p5, rand, structureboundingbox, facing) : null;
       }
    
    @Override
    public boolean addComponentParts(World worldIn, Random randomIn, StructureBoundingBox sbbIn) {
    
    if (this.averageGroundLvl < 0)
           {
               this.averageGroundLvl = this.getAverageGroundLevel(worldIn, sbbIn);
    
               if (this.averageGroundLvl < 0)
               {
                   return true;
               }
    
               this.boundingBox.offset(0, this.averageGroundLvl - this.boundingBox.maxY + 12 - 1, 0);
           }
    
    this.fillWithBlocks(worldIn, sbbIn, 0, 0, 0, 3, 3, 3, Blocks.DIAMOND_BLOCK.getDefaultState(), Blocks.DIAMOND_BLOCK.getDefaultState(), false);
    
    return true;
    }
    }
    

    Minecraft fait donc spawn ma structure dans un nouvel emplacement du village, cependant je voudrais plutôt modifier une structure d'une maison pré-éxistante plutôt qu'en faire une nouvelle (rajouter un block dans une des maisons par exemple).

    Une idée ?  :X</structurecomponent>


  • Administrateurs

    Salut,
    Pour le code en couleur il faut utiliser la balise java (comme expliqué dans le règlement de la section au passage).

    Pour la structure je ne sais pas, faudrait regarder si forge à des fonctions / event pour.



  • Salut,
    soit class transformer pour modifier et rajouter ton block dans la class concernée, ou alors retirer la "maison" qui te pose problème, et rajouter une custom à l'identique, mais qui posséderait ton nouveau block. La seconde solution est sûrement la + facile.



  • Salut,
    Pour le code en couleur il faut utiliser la balise java (comme expliqué dans le règlement de la section au passage).

    Pour la structure je ne sais pas, faudrait regarder si forge à des fonctions / event pour.

    Oui j'ai vu, j'ai modifié mon message pour la couleur.
    Sinon je n'ai pas vu d'event correspondant à la création du village.

    Salut,

    soit class transformer pour modifier et rajouter ton block dans la class concernée, ou alors retirer la "maison" qui te pose problème, et rajouter une custom à l'identique, mais qui posséderait ton nouveau block. La seconde solution est sûrement la + facile.

    Oui c'est ce que je me suis dit, je rajoute une maisons identique à celles éxistantes avec mon bloc à l'intérieur mais je me demandais s'il n'y avait pas de moyen plus simple. 
    Sinon, peut-être que je peux directement appeler createPiece de House1, House2 ou House3 aléatoirement puis ajouter mon bloc en utilisant la position ? Je vais essayer et je reviens vers vous.


    Bon, au final j'ai fais en sorte que mon Component hérite de house1, puis j'ai call :

    super.addComponentParts(worldIn, randomIn, sbbIn);
    

    Pour que la maison spawn avant de rajouter des choses dedans.

    Je passe en résolu 🙂