[1.7.10 ] [SoundManager] Petit problème pour récupérer une information.



  • Salut, Je voudrais savoir comment je pourrai faire pour récupérer une information du genre si un ItemRecord est en cour de lecture.

    J'utilise ça pour lancer la musique

    
           public boolean SoundPlaye = false;
    @Override
    public void updateEntity()
    {
    if(contents[0] != null && !SoundPlaye == true)
    {
    System.out.println("Play Music !");
    Item x = contents[0].getItem();
    this.worldObj.playAuxSFXAtEntity((EntityPlayer)null, 1005, this.xCoord, this.yCoord, this.zCoord, Item.getIdFromItem(x));
    SoundPlaye = true;
    }
    }
    
    

    Merci de votre aide 🙂



  • Tu as sûrement un event SoundRecordPlayed event ou un truc du genre. Au pire tu prends un de ces event et tu check le nom du son joué.



  • Gras à toi je suis parti chercher avec mot clé (SoundRecordPlayed) je suis tomber sur ça

    https://dl.dropboxusercontent.com/s/h777x7ugherqs0w/forgeevents.html
    après ça
    http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/modification-development/2142490-how-to-test-if-a-sound-is-being-played
    Et ça !
    http://pastebin.com/jC7dyMxr

    Je donne pour les gens qui cherche aussi comment faire !



  • Hé bien ? À partir de là, c'est bon tu as juste à faire une condition avec le boolean et fais attention au nom du cd !



  • Le problème c'est que en multijoueur SoundManager existe pas 😕

    j'ai réglé les problème pour le multijoueur pour pas ça crash mais je sais pas comment faire pour que la musique fonctionne en multijoueur..

    Mon Main

    package re.aurelien.mod;
    
    import net.minecraft.block.Block;
    import net.minecraft.block.material.Material;
    import net.minecraft.client.Minecraft;
    import net.minecraft.client.audio.ISound;
    import net.minecraft.client.audio.SoundManager;
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.item.Item;
    import net.minecraft.item.Item.ToolMaterial;
    import net.minecraftforge.client.event.sound.SoundLoadEvent;
    import net.minecraftforge.common.MinecraftForge;
    import net.minecraftforge.common.util.EnumHelper;
    import re.aurelien.mod.MusicBlock.MusicBlock;
    import re.aurelien.mod.MusicBlock.TileEntityMusicBlock;
    
    import java.lang.reflect.Field;
    
    import com.google.common.collect.HashBiMap;
    
    import cpw.mods.fml.common.FMLCommonHandler;
    import cpw.mods.fml.common.Mod;
    import cpw.mods.fml.common.Mod.EventHandler;
    import cpw.mods.fml.common.Mod.Instance;
    import cpw.mods.fml.common.SidedProxy;
    import cpw.mods.fml.common.event.FMLInitializationEvent;
    import cpw.mods.fml.common.event.FMLPostInitializationEvent;
    import cpw.mods.fml.common.event.FMLPreInitializationEvent;
    import cpw.mods.fml.common.eventhandler.SubscribeEvent;
    import cpw.mods.fml.common.network.NetworkRegistry;
    import cpw.mods.fml.common.registry.GameRegistry;
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    
    @Mod(modid = AurelienMod.MODID, version = AurelienMod.VERSION)
    public class AurelienMod
    {
    public static HashBiMap <string, isound="">playing = null;
    
    public static ToolMaterial SuperMaterial = EnumHelper.addToolMaterial("SuperMaterial", 5, 1000, 15.0F, 20.0F, 30);
       public static final String MODID = "aurelienmod";
       public static final String VERSION = "0.0.1";
    
       Item ItemSwordSkyQueen;
    
    public static Item ItemSwordAurelien;
    
       @Instance(MODID)
       public static AurelienMod instance;
    
       @SidedProxy(clientSide = "re.aurelien.mod.client.ClientProxy", serverSide = "re.aurelien.mod.CommonProxy")
       public static CommonProxy proxy;
    
       public static Block _MusicBlock;
    
       @EventHandler
       public void preinit(FMLPreInitializationEvent event)
       {
           ItemSwordSkyQueen = new ItemSword_SkyQueen(SuperMaterial).setCreativeTab(MyCreativeTabs);
           ItemSwordAurelien = new ItemSword_Aurelien(SuperMaterial).setCreativeTab(MyCreativeTabs);
    
           _MusicBlock = new  MusicBlock(Material.wood).setBlockName("MusicBlock").setBlockTextureName(AurelienMod.MODID + ":MusicBlock").setCreativeTab(MyCreativeTabs);
    
           GameRegistry.registerBlock(_MusicBlock, "MusicBlock");
        GameRegistry.registerTileEntity(TileEntityMusicBlock.class, "TileEntityMusicBlock");
    
        FMLCommonHandler.instance().bus().register(this);
        MinecraftForge.EVENT_BUS.register(this);
       }
    
       @SideOnly(Side.CLIENT)
       @SubscribeEvent
       public void onSoundsLoaded(SoundLoadEvent event)
       {
        SoundManager manager = null;
           try
           {
               // handler -> manager -> playingList
    
               // gets SoundHandler
               net.minecraft.client.audio.SoundHandler handler;
               Field field_handler = Minecraft.class.getDeclaredField("mcSoundHandler");
               field_handler.setAccessible(true);
               handler = (net.minecraft.client.audio.SoundHandler) field_handler.get(Minecraft.getMinecraft());
    
               // gets SoundManager
               Field field_manager = net.minecraft.client.audio.SoundHandler.class.getDeclaredField("sndManager");
               field_manager.setAccessible(true);
               manager = (SoundManager) field_manager.get(handler);
    
               // gets playing list
               Field field_playing = SoundManager.class.getDeclaredField("playingSounds");
               field_playing.setAccessible(true);
               AurelienMod.playing = (HashBiMap<string, isound="">) field_playing.get(manager);
    
           }
           catch (Exception ex)
           {
               ex.printStackTrace();
           }
       }
    
    @EventHandler
       public void init(FMLInitializationEvent event)
       {
        NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandlerAurelienMod());
        proxy.registerRenderers();
       }
    
       @EventHandler
       public void postInit(FMLPostInitializationEvent event)
       {
    
       }
    
       public static CreativeTabs MyCreativeTabs = new CreativeTabs("SkyQueenMod") {
           @Override
           @SideOnly(Side.CLIENT)
           public Item getTabIconItem() {
               return Item.getItemFromBlock(_MusicBlock);
           }
       };
    
    }
    

    TileEntityMusicBlock.java

    package re.aurelien.mod.MusicBlock;
    
    import com.google.common.collect.HashBiMap;
    
    import net.minecraft.client.Minecraft;
    import net.minecraft.client.audio.ISound;
    import net.minecraft.client.audio.ISound.AttenuationType;
    import net.minecraft.client.audio.SoundManager;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.inventory.ISidedInventory;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemRecord;
    import net.minecraft.item.ItemStack;
    import net.minecraft.nbt.NBTTagCompound;
    import net.minecraft.nbt.NBTTagList;
    import net.minecraft.tileentity.TileEntity;
    import net.minecraft.util.ResourceLocation;
    import net.minecraft.world.World;
    import net.minecraftforge.common.MinecraftForge;
    import re.aurelien.mod.AurelienMod;
    import sun.util.logging.resources.logging_fr;
    
    import java.lang.reflect.Field;
    
    public class TileEntityMusicBlock extends TileEntity implements ISidedInventory {
    
    private ItemStack[] contents = new ItemStack[9];
    
    private int indexMusic = 0;
    private int IdMusic;
       private ResourceLocation SoundPlayeResourceLocation;
       private boolean SoundPlaye = false;
    
       public void PlayeurList()
       {
          if(SoundPlaye == true)
      {
      if(this.contents[IdMusic] == null)
      {
     this.worldObj.playAuxSFX(1005, this.xCoord, this.yCoord, this.zCoord, 0);
     this.worldObj.playRecord((String)null, this.xCoord, this.yCoord, this.zCoord);
      }
    
      boolean d = isSoundPlaying(SoundPlayeResourceLocation);
      if(d == false)
      {
      System.out.println("On passe le cd !");
      if(indexMusic < 7)
      {
      indexMusic = indexMusic + 1;
      }
      else
      {
      indexMusic = 0;
      }
    
      SoundPlaye = false;
      }
      }
      else
      {
      try
    {
      if(this.contents[indexMusic] != null)
      {
      PlayeMusic(indexMusic);
      }
      else
      {
      if(indexMusic < 7)
      {
      indexMusic = indexMusic + 1;
      }
      else
      {
      indexMusic = 0;
      }
      }
    }
    catch(Exception ex)
    {
    System.out.println(ex);
    }
      }
    
       }
    
    private void PlayeMusic(int index)
    {
    System.out.println("Play : " + index);
          if (AurelienMod.playing != null)
           {
    if(SoundPlaye != true)
    {
    
    Item item = contents[index].getItem();
    ItemRecord ItemRecord = (ItemRecord) item;
    
    String Name = ItemRecord.recordName;
    String RecordResource = ItemRecord.getRecordResource(Name).toString();
    RecordResource = RecordResource.replace("minecraft:","minecraft:records.");
    this.SoundPlayeResourceLocation = new ResourceLocation(RecordResource);
    
    this.IdMusic = index;
    System.out.println("Play : " + RecordResource);
    
    this.worldObj.playAuxSFXAtEntity((EntityPlayer)null, 1005, this.xCoord, this.yCoord, this.zCoord, Item.getIdFromItem(item));
    SoundPlaye = true;
    }
           }
    }
    
    private boolean isSoundPlaying(ResourceLocation res)
    {
           if (AurelienMod.playing != null)
           {
               ISound[] array_playing = AurelienMod.playing.values().toArray(new ISound[AurelienMod.playing.values().size()]);
               for (int i = 0; i < array_playing.length; i++)
               {
                //System.out.println(array_playing*.getPositionedSoundLocation() + "==" + res );
                   if (array_playing*.getPositionedSoundLocation().equals(res))
                   {
                 return true;
                   }
               }
           }
           return false;
       }
    
    public void readFromNBT(NBTTagCompound nBTTagCompound)
    {
    super.readFromNBT(nBTTagCompound);
    
    NBTTagList var2 = nBTTagCompound.getTagList("Items", 10);
           this.contents = new ItemStack[this.getSizeInventory()];
    
           for (int var3 = 0; var3 < var2.tagCount(); ++var3)
           {
               NBTTagCompound var4 = var2.getCompoundTagAt(var3);
               byte var5 = var4.getByte("Slot");
    
               if (var5 >= 0 && var5 < this.contents.length)
               {
                   this.contents[var5] = ItemStack.loadItemStackFromNBT(var4);
               }
           }
    }
    
    public void writeToNBT(NBTTagCompound nBTTagCompound)
    {
    super.writeToNBT(nBTTagCompound);
    NBTTagList var2 = new NBTTagList();
    
           for (int var3 = 0; var3 < this.contents.length; ++var3)
           {
               if (this.contents[var3] != null)
               {
                   NBTTagCompound var4 = new NBTTagCompound();
                   var4.setByte("Slot", (byte)var3);
                   this.contents[var3].writeToNBT(var4);
                   var2.appendTag(var4);
               }
           }
    
           nBTTagCompound.setTag("Items", var2);
    }
    
    @Override
       public void updateEntity()
       {
    this.worldObj.scheduleBlockUpdate(this.xCoord, this.yCoord, this.zCoord, this.getBlockType(), 5);
       }
    
    @Override
    public int getSizeInventory() {
    return this.contents.length;
    }
    
    @Override
    public ItemStack getStackInSlot(int SlotIndex) {
    return this.contents[SlotIndex];
    }
    
    @Override
    public ItemStack decrStackSize(int Itemindex, int number)  {
    if (this.contents[Itemindex] != null)
           {
               ItemStack itemStack;
               if (this.contents[Itemindex].stackSize <= number)
               {
                itemStack = this.contents[Itemindex];
                   this.contents[Itemindex] = null;
                   return itemStack;
               }
               else
               {
                itemStack = this.contents[Itemindex].splitStack(number);
    
                   if (this.contents[Itemindex].stackSize == 0)
                   {
                       this.contents[Itemindex] = null;
                   }
    
                   return itemStack;
               }
           }
           else
           {
               return null;
           }
    }
    
    @Override
    public ItemStack getStackInSlotOnClosing(int SlotIndex) {
    if (this.contents[SlotIndex] != null)
           {
               ItemStack var2 = this.contents[SlotIndex];
               this.contents[SlotIndex] = null;
               return var2;
           }
           else
           {
               return null;
           }
    }
    
    @Override
    public void setInventorySlotContents(int slotIndex, ItemStack stack)  {
    this.contents[slotIndex] = stack; // met l'item stack dans le tableau
    
           if(stack != null && stack.stackSize > this.getInventoryStackLimit()) // si la taille de l'item stack dépasse la limite maximum de l'inventaire
           {
               stack.stackSize = this.getInventoryStackLimit(); // on le remet sur la limite
           }
    
           this.markDirty(); // met à jour le tile entity
    }
    
    @Override
    public String getInventoryName() {
    return "tile.BlockLavaFabricator";
    }
    
    @Override
    public boolean hasCustomInventoryName() {
    // TODO Auto-generated method stub
    return false;
    }
    
    @Override
    public int getInventoryStackLimit()
    {
    return 1;
    }
    
    @Override
    public boolean isUseableByPlayer(EntityPlayer player)
    {
    return this.worldObj.getTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : player.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D;
    }
    
    @Override
    public void openInventory() {
    
    }
    
    @Override
    public void closeInventory() {
    
    }
    
    @Override
    public boolean isItemValidForSlot(int p_94041_1_, ItemStack p_94041_2_) {
    
    return true;
    }
    
    @Override
    public int[] getAccessibleSlotsFromSide(int p_94128_1_) {
    
    return null;
    }
    
    @Override
    public boolean canInsertItem(int p_102007_1_, ItemStack p_102007_2_, int p_102007_3_) {
    
    return false;
    }
    
    @Override
    public boolean canExtractItem(int p_102008_1_, ItemStack p_102008_2_, int p_102008_3_) {
    
    return false;
    }
    
    }
    

    MusicBlock.java

    package re.aurelien.mod.MusicBlock;
    
    import java.util.Random;
    
    import net.minecraft.block.Block;
    import net.minecraft.block.BlockContainer;
    import net.minecraft.block.material.Material;
    import net.minecraft.client.audio.ISound;
    import net.minecraft.entity.item.EntityItem;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemRecord;
    import net.minecraft.item.ItemStack;
    import net.minecraft.nbt.NBTTagCompound;
    import net.minecraft.tileentity.TileEntity;
    import net.minecraft.util.ResourceLocation;
    import net.minecraft.world.World;
    import re.aurelien.mod.AurelienMod;
    
    public class MusicBlock extends BlockContainer {
    
    public MusicBlock(Material p_i45386_1_) {
    super(p_i45386_1_);
    }
    
    @Override
    public void updateTick(World world, int x, int y, int z, Random rand)
    {
     TileEntityMusicBlock TileEntity = (TileEntityMusicBlock) world.getTileEntity(x, y, z);
     TileEntity.PlayeurList();
     world.scheduleBlockUpdate(x, y, z, this, 5);
    }
    
    @Override
    public boolean getTickRandomly() {
    return true;  
    }
    
    @Override
    public int onBlockPlaced(World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ, int meta) {
    
    world.scheduleBlockUpdate(x, y, z, this, 5);
    return meta;
    }
    
    public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX,float hitY, float hitZ)
    {
    if (world.isRemote)
        {
          return true;
        }
        else
        {
    player.openGui(AurelienMod.instance, 0, world, x, y, z);
       return true;
        }
    }
    
    private final Random field_149955_b = new Random();
    
    @Override
       public void breakBlock(World worldObj, int x, int y, int z, Block p_149749_5_, int p_149749_6_)
    {
    worldObj.playAuxSFX(1005,  x , y , z, 0);
    worldObj.playRecord((String)null,  x , y, z);
    
    TileEntityMusicBlock TileEntity = (TileEntityMusicBlock) worldObj.getTileEntity(x, y, z);
    
           if ( TileEntity != null)
           {
               for (int var8 = 0; var8 <  TileEntity.getSizeInventory(); ++var8)
               {
                   ItemStack var9 =  TileEntity.getStackInSlot(var8);
    
                   if (var9 != null)
                   {
                       float var10 = this.field_149955_b.nextFloat() * 0.8F + 0.1F;
                       float var11 = this.field_149955_b.nextFloat() * 0.8F + 0.1F;
                       EntityItem var14;
    
                       for (float var12 = this.field_149955_b.nextFloat() * 0.8F + 0.1F; var9.stackSize > 0; worldObj.spawnEntityInWorld(var14))
                       {
                           int var13 = this.field_149955_b.nextInt(21) + 10;
    
                           if (var13 > var9.stackSize)
                           {
                               var13 = var9.stackSize;
                           }
    
                           var9.stackSize -= var13;
                           var14 = new EntityItem(worldObj, (double)((float)x + var10), (double)((float)y + var11), (double)((float)z + var12), new ItemStack(var9.getItem(), var13, var9.getItemDamage()));
                           float var15 = 0.05F;
                           var14.motionX = (double)((float)this.field_149955_b.nextGaussian() * var15);
                           var14.motionY = (double)((float)this.field_149955_b.nextGaussian() * var15 + 0.2F);
                           var14.motionZ = (double)((float)this.field_149955_b.nextGaussian() * var15);
    
                           if (var9.hasTagCompound())
                           {
                               var14.getEntityItem().setTagCompound((NBTTagCompound)var9.getTagCompound().copy());
                           }
                       }
                   }
               }
    
               worldObj.func_147453_f(x, y, z, p_149749_5_);
           }
    }
    
    @Override
    public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) {
    return new TileEntityMusicBlock();
    }
    
    }
    

    ContainerMusicBlock.java

    package re.aurelien.mod.MusicBlock;
    
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.entity.player.InventoryPlayer;
    import net.minecraft.inventory.Container;
    import net.minecraft.inventory.Slot;
    import net.minecraft.item.ItemRecord;
    import net.minecraft.item.ItemStack;
    
    public class ContainerMusicBlock extends Container {
    
    private final TileEntityMusicBlock Tile;
    public ContainerMusicBlock (TileEntityMusicBlock tile, InventoryPlayer inventory) {
    this.Tile =  tile;
    
    for (int i=1; i <9; ++i)
            {
       this.addSlotToContainer(new Slot(tile, i - 1, (19 * i) - 6, 15){
    @Override
    public boolean isItemValid(ItemStack Stack)
    {
       if(Stack.getItem() instanceof ItemRecord)
    {
      return true;
    }
    else
    {
      return false;
    }
    }
    });
        }
    
    //this.addSlotToContainer(new Slot(tile, 8, 80, 35)
    //{
    // @Override
    // public boolean isItemValid(ItemStack Stack)
    // {
    // return false;
    //}
    //});
    
    this.bindPlayerInventory(inventory);
    }
    
    private void bindPlayerInventory(InventoryPlayer inventory)
       {
           int i;
           for(i = 0; i < 3; ++i)
           {
               for(int j = 0; j < 9; ++j)
               {
                   this.addSlotToContainer(new Slot(inventory, j + i * 9 + 9, 8 + j * 18, 84 + i * 18));
               }
           }
    
           for(i = 0; i < 9; ++i)
           {
               this.addSlotToContainer(new Slot(inventory, i, 8 + i * 18, 142));
           }
       }
    
    public boolean canInteractWith(EntityPlayer player) {
    
    return this.Tile.isUseableByPlayer(player);
    }
    
    public ItemStack transferStackInSlot(EntityPlayer Player, int slotIndex)
    {
       ItemStack var3 = null;
           Slot var4 = (Slot)this.inventorySlots.get(slotIndex);
    
           if (var4 != null && var4.getHasStack())
           {
               ItemStack var5 = var4.getStack();
    
               if (var5.getItem() instanceof ItemRecord)
           {
                 var3 = var5.copy();
           }
               else
               {
                return null;
               }
    
               if (slotIndex < 8)
               {
                   if (!this.mergeItemStack(var5, 8, this.inventorySlots.size(), true))
                   {
                       return null;
                   }
               }
               else if (!this.mergeItemStack(var5, 0, 8, false))
               {
                   return null;
               }
    
               if (var5.stackSize == 0)
               {
                   var4.putStack((ItemStack)null);
               }
               else
               {
                   var4.onSlotChanged();
               }
    
           }
    
           return var3;
        }
    }
    ```</string,></string,>


  • Tu pourrais mettre les balises java pour faciliter l'aperçu du code ?
    De + si tu respectais la convention, ça serait aussi + apréciable niveau lecture.
    Et quand souhaites-tu vérifier que le son est joué, dans ta TE ? Je te rappelle que les musiques ne sont gérées que côté server, du coup tu n'as pas à t'embêter au niveau de ton serveur, c'est le client qui s'en occupera 😉



  • Reuh Salut,
    (De + si tu respectais la convention, ça serait aussi + apréciable niveau lecture.) Désolé je suis pas un vrais programmeur je bricole comme je peux x')

    Alors j'ai trouvé mais le problème c'est que je me demander si le fait de refresh se petit boue code la

    
    @SideOnly(Side.CLIENT)
    @SubscribeEvent
    public void PlaySoundSource(PlaySoundSourceEvent event)
    {
    SoundManager manager = null;
    try
    {
    // handler -> manager -> playingList
    
    // gets SoundHandler
    net.minecraft.client.audio.SoundHandler handler;
    Field field_handler = Minecraft.class.getDeclaredField("mcSoundHandler");
    field_handler.setAccessible(true);
    handler = (net.minecraft.client.audio.SoundHandler) field_handler.get(Minecraft.getMinecraft());
    
    // gets SoundManager
    Field field_manager = net.minecraft.client.audio.SoundHandler.class.getDeclaredField("sndManager");
    field_manager.setAccessible(true);
    manager = (SoundManager) field_manager.get(handler);
    
    // gets playing list
    Field field_playing = SoundManager.class.getDeclaredField("playingSounds");
    field_playing.setAccessible(true);
    AurelienMod.playing = (HashBiMap<string, isound="">) field_playing.get(manager);
    
    }
    catch (Exception ex)
    {
    ex.printStackTrace();
    }
    }
    
    

    Pause pas problème de performance ??

    Au début je les ajouter dans une fonction qui load les sound du cout coté client ça fonctionner mais pas coté server !

    C'était suis la

    
    @SideOnly(Side.CLIENT)
    @SubscribeEvent
    public void onSoundsLoaded(SoundLoadEvent event)
    {
    
    ```</string,>


  • En solo tout fonction bien, juste que sur le server je peux pas utilisé ( import net.minecraft.client.audio.SoundManager; )

    Du coup la fonction

    
    private boolean isSoundPlaying(ResourceLocation res)
    {
    if (AurelienMod.playing != null)
    {
    ISound[] array_playing = AurelienMod.playing.values().toArray(new ISound[AurelienMod.playing.values().size()]);
    for (int i = 0; i < array_playing.length; i++)
    {
    if (array_playing*.getPositionedSoundLocation().equals(res))
    {
    return true;
    }
    }
    }
    return false;
    }
    
    

    Du coup il return false coté server parce que la variable (AurelienMod.playing) est null

    parce que le server utilise pas de SoundManager. c'est que coté client.



  • ~~Si les TE ne sont pas des 2 côtés alors packet obligatoire ~~
    Les TE sont gérés des 2 côtés donc suis le message de robin au-dessus


  • Administrateurs

    Oui et c'est normal, le son n'est que géré côté client. Il n'a aucun intérêt côté serveur. Tout ce qui concerne le son ne doit que être fait sur le client.



  • Du coup je vais essayer nettoyer mon code, est aller après tester les Packet ^^ je vous tient au courant.



  • Nan regarde mon message (je l'ai édité). Pas besoin de packet, rajoute juste une condition de ce genre
    if(this.worldObj.isRemote)
    {
    //Ta méthode qui check si un disque est joué
    }



  • je peux pas le mettre dans isSoundPlaying parce que coté server il va return false quand même ^^ du coup il va coupé la musique est remettre un autre en boucle sans que la musique soie fini ^^

    Est quand tu parler de TE sa va dit ?

    (Les TE sont gérés des 2 côtés)

    En plus par IMessage je peux pas le faire non plus,

    Le updateTick  fonctionne que sur server est pas sur client 😕



  • Les TileEntity sont des 2 côtés : client et serveur. Du coup tu peux très bien vérifier dans la méthode updateEntity de ta TE si une musique est jouée. Et comme on te le dit depuis plusieurs messages, occupe toi que du client ^^ Le serveur n'en a rien à faire de ta musique. Du coup rajoute cette condition :
    if(this.worldObj.isRemote)



  • J'ai déjà teste ^^ le problème c'est que quand le mod est sur le server le client utilise pas la fonction updateTick, il y a que le serveur. j'ai teste avec un System.out.println est il y à que le server qui l'affiche dans le console le client non 😕



  • Est-ce que t'as essayé mon code au moins avant de dire qu'il ne marche pas ? Si c'est le cas, alors packet obligatoire !



  • Juste un problème c'est que le updateTick marche pas sur le client quand j'ajoute le mod sur un server forge.
    Il y à que le server qui updateTick le block

    Je comprend pas 😕

    
    @Override
    public void updateTick(World world, int x, int y, int z, Random rand)
    {
    if (world.isRemote == true)
    {
    System.out.println("Client updateTick"); // Quand le mod est sur le server ça marche pas !
    }
    else
    {
    System.out.println("Server updateTick");
    }
    
    world.markBlockForUpdate(x, y, z);
    }
    
    

  • Administrateurs

    C'est tout à fait normal. Sur serveur il y a que les fonctions serveurs qui sont exécutés et world.isRemote est toujours faux.
    Sur ton client c'est l'inverse.
    Et lorsque tu joues en solo tu as les deux, car il y a un serveur intégré qui tourne.



  • J'ai trouvé un moyen plus simple, j'ai créer 2 classe pour géré la duré des musique, faut juste l'ajoute dans un fichier json mais du coup ça fonction des 2 coté est j'ai plus besoin de SoundManager. j'ai juste encore quelque problème avec les ticks. parce que le sound s'arrête 3 seconde en avance ^^

    Je passerai le code.