Faire spawn un boss toutes les 12h?



  • Re-Bonsoir,

    Toujours dans le cadre de mon serveur je souhaite créer une sorte d'instance, un donjon qui se renouvèle toutes les 12h, j'aid onc essayé un code utilisant un bloc qui le regénère, cependant cela fait mtn 15heures que j'attends et toujours rien.
    Je précise que j'ai également essayé avec un temps très court et que cela fonctionnait.

    Mon idée serait que le chunk se déchargeant les ticks ne se font plus, je cherche donc une solution autre que celle ci, voici le code de ma TileEntity gérant le renouvellement:

    package Gallad.Mineald;
    
    import java.util.List;
    import java.util.Random;
    
    import net.minecraft.command.IEntitySelector;
    import net.minecraft.entity.Entity;
    import net.minecraft.entity.monster.EntityCreeper;
    import net.minecraft.nbt.NBTTagCompound;
    import net.minecraft.tileentity.TileEntity;
    import net.minecraft.util.AxisAlignedBB;
    import net.minecraft.world.World;
    
    public class TileEntityCreepyBlock extends TileEntity
    {
    public int Compteur;
    public int CompteurParMillier;
    public Random rand;
    public int count;
    
    public void readFromNBT(NBTTagCompound nbtTag)
    {
    super.readFromNBT(nbtTag);
    Compteur = nbtTag.getInteger("Compteur");
    CompteurParMillier = nbtTag.getInteger("CompteurParMillier");
    }
    
    public void writeToNBT(NBTTagCompound nbtTag)
    {
    super.writeToNBT(nbtTag);
    nbtTag.setInteger("Compteur", Compteur);
    nbtTag.setInteger("CompteurParMillier", CompteurParMillier);
    }
    
    @Override
    public void updateEntity()
    {
    Compteur++;
    if(Compteur < 0)
    {
    Compteur = 0;
    }
    if(CompteurParMillier < 0)
    {
    CompteurParMillier = 0;
    }
    if(CompteurParMillier == 1)
    {
    count = 0;
    }
    if(Compteur >= 1000)
    {
    CompteurParMillier++;
    Compteur = 0;
    }
    if(CompteurParMillier >= 864)
    {
    CompteurParMillier = 0;
    if(count != 1)
    {
    
    System.out.println("Mommy Creepy Respawn!");
    final IEntitySelector livingFilter = new MommyFilter();
    AxisAlignedBB Axis = AxisAlignedBB.getAABBPool().getAABB(this.xCoord - 24, this.yCoord - 2, this.zCoord - 25, this.xCoord + 24, this.yCoord + 2, this.zCoord + 25);
    List entityTargetList = this.worldObj.selectEntitiesWithinAABB(Entity.class, Axis, livingFilter);
    for(int i = 0; i < entityTargetList.size(); i++)
    {
    Entity entityTarget = (Entity)entityTargetList.get(i);
    if(entityTarget instanceof EntityMommyCreepy)
    {
    entityTarget.setDead();
    }
    }
    new MommyDungeon(this.worldObj, rand, this.xCoord, this.yCoord, this.zCoord);
    if(!worldObj.isRemote)
    {
    spawnMommyCreepy(this.worldObj, (double)(this.xCoord + 23), (double)(this.yCoord + 1), (double)(this.zCoord + 24));
    }
    count = 1;
    }
    
    }
    }
    
    public void spawnMommyCreepy(World world, double posX, double posY, double posZ)
    {
    Entity entity = new EntityMommyCreepy(world);
    entity.setPosition(posX, posY, posZ);
    world.spawnEntityInWorld(entity);
    }
    }
    

    Mon problème vient il bien du fait que le chunk soit déchargé?
    Si oui, quel moyen ai-je pour résoudre ce soucis? j'ai essayé avec un plugin mais cela ne fonctionne pas.
    Si Non, vers quoi dois je m'orienter?


  • Moddeurs confirmés Rédacteurs Administrateurs

    Le plus simple, tu te sert de l'heure. Genre un regen à 12h et un à minuit et puis voila.



  • cela fonctionnera malgré le déchargement du chunk?
    Quel méthode utilisé pour avoir l'heure?


  • Moddeurs confirmés Rédacteurs Administrateurs

    Oui, sauf si le chunk n'est pas chargé à l'heure du reset.
    Il y a pleins de moyens différent pour avoir l'heure en java, cherche sur google 😉



  • D'accourd, il existe un moyen pour faire en sorte que ce bloc empeche le chunk de deload?


  • Moddeurs confirmés Rédacteurs Administrateurs

    oui, tu peux faire que ce bloc soit un chunk loader (exemple : railcraft, chicken chunk, buildcraft).
    Forge à une fonction pour ça, en revanche je ne sais pas comment l'utiliser, il faudrait voir du côté du quarry de buildcraft comme buildcraft est open source.



  • J'ai trouvé ce tout ptit post, je peux m'y fier?
    http://www.minecraftforge.net/forum/index.php?topic=2884.0


  • Modérateurs

    Tu peux toujours essayer ^^



  • Qu'en pensez vous? Cela vous semble t'il fonctionnel, ou du moins pas trop moche pour les yeux ^^

    
    public void updateEntity()
    {
    if (new java.util.Date().getHours() == 12 || new java.util.Date().getHours() == 0)
    {
    if (new java.util.Date().getMinutes() == 0)
    {
    if (new java.util.Date().getSeconds() == 0)
    {
    if (count == 0)
    {
    System.out.println("Mommy Creepy Respawn!");
    final IEntitySelector livingFilter = new MommyFilter();
    AxisAlignedBB Axis = AxisAlignedBB.getAABBPool().getAABB(this.xCoord - 24, this.yCoord - 2, this.zCoord - 25, this.xCoord + 24, this.yCoord + 2, this.zCoord + 25);
    List entityTargetList = this.worldObj.selectEntitiesWithinAABB(Entity.class, Axis, livingFilter);
    for (int i = 0; i < entityTargetList.size(); i++)
    {
    Entity entityTarget = (Entity)entityTargetList.get(i);
    if (entityTarget instanceof EntityMommyCreepy)
    {
    entityTarget.setDead();
    }
    }
    new MommyDungeon(this.worldObj, rand, this.xCoord, this.yCoord, this.zCoord);
    if(!worldObj.isRemote)
    {
    spawnMommyCreepy(this.worldObj, (double)(this.xCoord + 23), (double)(this.yCoord + 1), (double)(this.zCoord + 24));
    }
    count++;
    }
    
    }
    if (new java.util.Date().getSeconds() == 1)
    {
    count = 0;
    }
    }
    }
    }
    
    

  • Modérateurs

    Ça me semble correct



  • Bon et bien plus que le soucis dont je t'avais parlé sur skype à propos des outils non réparable et j'ai résolu presque tout mes ptits bugs du moments ^^



  • Juste … pourquoi avoir attendu 15h ?

    Mettre un test avec 1 minute, 5 minutes, 15 minutes aurait suffit pour vérifier non ?



  • sauf que en solo 5/10/15 minutes ça marche
    mais 12h non…

    A mon avis c'est pck les ticks se font que quand le chunk est load


Log in to reply