Mob Spawner



  • Bonjour/Bonsoir. J'ai créé une structure où un mob spawner doit apparaître mais, alors que j'ai modifié ses "données", il reste à l'entité du cochon.

    WorldGenDungeonRoomSmall.java (partie du mob spawner)

    
    world.setBlock(x + 4, y + 1, z + 4, Block.getBlockById(52));
    Entity entity;
    switch(rand.nextInt(7))
    {
    case 1:
           entity = new EntityZombie(world);
    break;
           case 2:
    entity = new EntitySkeleton(world);
    break;
    case 3:
    entity = new EntityWitch(world);
    break;
    case 4:
    entity = new EntitySpider(world);
    break;
    case 5:
    entity = new EntityCreeper(world);
    break;
    case 6:
    entity = new EntityEnderman(world);
    break;
    case 7:
    entity = new EntityCaveSpider(world);
    break;
    default:
    entity = new EntityZombie(world);
    break; // Nécessaire ?
    }
    TileEntityMobSpawner tileentitymobspawner = (TileEntityMobSpawner)world.getTileEntity(x + 4, y + 1, z + 4);
    tileentitymobspawner.func_145881_a().func_98265_a(entity);
    NBTTagCompound nbt = new NBTTagCompound();
    tileentitymobspawner.writeToNBT(nbt);
    nbt.setShort("minSpawnDelay",(short)50);
    nbt.setShort("maxSpawnDelay",(short)200);
    tileentitymobspawner.readFromNBT(nbt);
    

    Pouvez-vous m'aider ?



  • world.setBlock(x + 4, y + 1, z + 4, Block.getBlockById(52));
    Entity entity;
    
    entity = new TonEntity(world);
    
    TileEntityMobSpawner tileentitymobspawner = (TileEntityMobSpawner)world.getTileEntity(x + 4, y + 1, z + 4);
    tileentitymobspawner.func_145881_a().func_98265_a(entity);
    NBTTagCompound nbt = new NBTTagCompound();
    tileentitymobspawner.writeToNBT(nbt);
    nbt.setShort("minSpawnDelay",(short)50);
    nbt.setShort("maxSpawnDelay",(short)200);
    tileentitymobspawner.readFromNBT(nbt);
    

    je pense qu'il te faut mettre ca dans ton bloc spawner mais je ne suis sur de rien



  • Si c'est retirer le switch, je ne vois pas ce que ça changerai, et après test, rien à changé.



  • bha la je sais pas je pensais que juste le retirer ca marcherai…



  • Logiquement comme le switch assigne une valeur à entity différente de EntityPig, ça ne pose pas de problème.


  • Administrateurs

    world.markBlockForUpdate(x + 4, y + 1, z + 4) pour signaler que le bloc a été changé à la fin non ?
    Et à ta place je ferai le tileentitymobspawner.func_145881_a().func_98265_a(entity); après les autres fonctions nbt.



  • 
    world.setBlock(x + 4, y + 1, z + 4, Block.getBlockById(52));
    Entity entity;
    switch(rand.nextInt(7))
    {
    case 1:
    entity = new EntityZombie(world);
    break;
    case 2:
    entity = new EntitySkeleton(world);
    break;
    case 3:
    entity = new EntityWitch(world);
    break;
    case 4:
    entity = new EntitySpider(world);
    break;
    case 5:
    entity = new EntityCreeper(world);
    break;
    case 6:
    entity = new EntityEnderman(world);
    break;
    case 7:
    entity = new EntityCaveSpider(world);
    break;
    default:
    entity = new EntityZombie(world);
    break;
    }
    TileEntityMobSpawner tileentitymobspawner = (TileEntityMobSpawner)world.getTileEntity(x + 4, y + 1, z + 4);
    NBTTagCompound nbt = new NBTTagCompound();
    tileentitymobspawner.writeToNBT(nbt);
    nbt.setShort("minSpawnDelay",(short)50);
    nbt.setShort("maxSpawnDelay",(short)200);
    tileentitymobspawner.readFromNBT(nbt);
    tileentitymobspawner.func_145881_a().func_98265_a(entity);
    world.markBlockForUpdate(x + 4, y + 1, x + 4);
    
    

    ça ne marche pas 😞



  • essaie de trouver des mod qui rajoute des mobSpawner, ou sinon le mod avec les souls shard



  • D'après ton code tu écrit des nbt avant de les paramétrés. Je n'y connais rien en nbt :p. Mais d'un point de vue logique, il faudrait lire, puis paramétrer, et enfin écrire.



  • @gagoi
    J'avais remarqué mais comme je suivais un tuto, je me suis dit que c'était peut-être normal (mais ça ne change rien après test).

    @isador34
    Je cherche.

    EDIT : J'ai beau chercher, les fonctions que je trouve dans les autres mods sont bizarres/différentes des miennes. Par exemple une fonction prend un String en argument à la place d'une entité (fonction de je ne trouve pas dans forge). Malgré avoir testé à peu près chacune d'entre-elles, je ne trouve pas. Pouvez-vous m'aider ?



  • UP, help !



  • Up, une idée ? 😞



  • Utilise les codes des mobs spawner des donjons vanilla il doivent avoir la solution
    Si le problème est résolu change la balise



  • Après une trèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèès longue pause, j'ai finalement trouvé la solution :

    
    world.setBlock(x + 4, y + 1, z + 4, Blocks.mob_spawner, 0, 2);
    
    TileEntityMobSpawner tileentitymobspawner = (TileEntityMobSpawner)world.getTileEntity(x + 4, y + 1, z + 4);
    if (tileentitymobspawner != null)
    {
                 tileentitymobspawner.func_145881_a().setEntityName(this.pickMobSpawner(rand));
    }
    else
    {
                System.err.println("Failed to fetch mob spawner entity at (" + (x + 4) + ", " + (y + 1) + ", " + (z + 4) + ")");
    }
    

    Sujet résolu.