• S'inscrire
    • Se connecter
    • Recherche
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    Non résolu [1.7.10] Création d'un container pour une interface d'échange

    Sans suite
    1.7.10
    3
    5
    447
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • A
      AngelSushi dernière édition par AngelSushi

      Bien le bonjour (ou bonsoir vu l’heure à laquelle j’écris ce message)

      Je viens ici car j’ai un petit problème. Je souhaiterais créer une interface d’échange, c’est à dire que le joueur puisse mettre des items dans certaines cases et pareil pour l’autre et qu’à la fin, le joueur reçoit les items de l’autre etc… Je bloque au niveau de l’attribution du handler puisque je créer a chaque fois une nouvelle instance de InventoryTrade ( ce qu’il ne faut pas faire apparement).

      Voici mon code :

      package fr.angelsushi.tradesao.gui.handler;
      
      import cpw.mods.fml.common.network.IGuiHandler;
      import fr.angelsushi.tradesao.gui.GuiTrade;
      import fr.angelsushi.tradesao.gui.container.ContainerTradeSender;
      import fr.angelsushi.tradesao.inventory.InventoryTrade;
      import net.minecraft.entity.player.EntityPlayer;
      import net.minecraft.world.World;
      
      public class HandlerTrade implements IGuiHandler {
      
      	private InventoryTrade inventoryTrade = new InventoryTrade();	
      	@Override
      	public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
      		if(ID == 0) {
      		return new ContainerTradeSender(player.inventory, new InventoryTrade(player));
      		}
      		
      			return null;
      	}
      
      	@Override
      	public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
      		if(ID == 0) {
      			return new GuiTrade(player.inventory, new InventoryTrade(player));
      		}
      		
      		
      		return null;
      }
      }
      
      package fr.angelsushi.tradesao.gui.container;
      
      import fr.angelsushi.tradesao.gui.SlotCustom;
      import fr.angelsushi.tradesao.inventory.InventoryTrade;
      import net.minecraft.entity.player.EntityPlayer;
      import net.minecraft.inventory.Container;
      import net.minecraft.inventory.IInventory;
      import net.minecraft.inventory.Slot;
      import net.minecraft.item.ItemStack;
      
      public class ContainerTradeSender extends Container{
      
      	
      	    private int numRows;
      	  private  InventoryTrade inventoryTrade;
      	  
      	    private static final String __OBFID = "CL_00001742";
      	    private boolean canInteract= false;
      
      	    public ContainerTradeSender(IInventory inventoryPlayer, IInventory inventoryTrade)
      	    {
      	        this.inventoryTrade = (InventoryTrade)inventoryTrade;
      	       
      	        this.numRows = inventoryTrade.getSizeInventory() / 6;
      	        inventoryTrade.openInventory();
      
      	        System.out.println(inventoryTrade.getSizeInventory());
      	      
      	        int i = (this.numRows - 4) * 18;
      	        int j;
      	        int k;
      
      	        this.addSlotToContainer(new Slot(inventoryTrade,0,12,26));
      	        this.addSlotToContainer(new Slot(inventoryTrade,1,30,26));
      	        this.addSlotToContainer(new Slot(inventoryTrade,2,48,26));
      	        
      	        this.addSlotToContainer(new Slot(inventoryTrade,3,12,44));
      	        this.addSlotToContainer(new Slot(inventoryTrade,4,30,44));  
      	        this.addSlotToContainer(new Slot(inventoryTrade,5,48,44));
      	        
      	        this.addSlotToContainer(new Slot(inventoryTrade,6,12,62));
      	        this.addSlotToContainer(new Slot(inventoryTrade,7,30,62));     
      	        this.addSlotToContainer(new Slot(inventoryTrade,8,48,62));
      	        
      	        this.addSlotToContainer(new Slot(inventoryTrade,9,113,26));
      	        this.addSlotToContainer(new Slot(inventoryTrade,10,131,26));
      	        this.addSlotToContainer(new Slot(inventoryTrade,11,149,26));
      	        
      
      	        this.addSlotToContainer(new Slot(inventoryTrade,12,113,44));
      	        this.addSlotToContainer(new Slot(inventoryTrade,13,131,44));
      	        this.addSlotToContainer(new Slot(inventoryTrade,14,149,44));
      	        
      
      	        this.addSlotToContainer(new Slot(inventoryTrade,15,113,62));
      	        this.addSlotToContainer(new Slot(inventoryTrade,16,131,62));
      	        this.addSlotToContainer(new Slot(inventoryTrade,17,149,62));
      	        
      
      	        for (j = 0; j < 3; ++j)
      	        {
      	            for (k = 0; k < 9; ++k)
      	            {
      	                this.addSlotToContainer(new Slot(inventoryPlayer, k + j * 9 + 9, 8 + k * 18, 103 + j * 18 + i + 4));
      	                
      	            }
      	        }
      
      	        for (j = 0; j < 9; ++j)
      	        {
      	            this.addSlotToContainer(new Slot(inventoryPlayer, j, 8 + j * 18, 161 + i + 4));
      	        }
      	    }
      
      	    public boolean canInteractWith(EntityPlayer p_75145_1_)
      	    {
      	    	  return true;
      	    }
      
      	    /**
      	     * Called when a player shift-clicks on a slot. You must override this or you will crash when someone does that.
      	     */
      	    public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int p_82846_2_)
      	    {
      	        ItemStack itemstack = null;
      	        Slot slot = (Slot)this.inventorySlots.get(p_82846_2_);
      
      	        if (slot != null && slot.getHasStack())
      	        {
      	            ItemStack itemstack1 = slot.getStack();
      	            itemstack = itemstack1.copy();
      
      	            if (p_82846_2_ < this.numRows * 9)
      	            {
      	                if (!this.mergeItemStack(itemstack1, this.numRows * 9, this.inventorySlots.size(), true))
      	                {
      	                    return null;
      	                }
      	            }
      	            else if (!this.mergeItemStack(itemstack1, 0, this.numRows * 9, false))
      	            {
      	                return null;
      	            }
      
      	            if (itemstack1.stackSize == 0)
      	            {
      	                slot.putStack((ItemStack)null);
      	            }
      	            else
      	            {
      	                slot.onSlotChanged();
      	            }
      	        }
      
      	        return itemstack;
      	    }
      	    
      	    
      
      		@Override
      		public ItemStack slotClick(int p_75144_1_, int p_75144_2_, int p_75144_3_, EntityPlayer p_75144_4_) {
      			for(int i = 0;i < this.inventorySlots.size();i++) {
      				Slot slot = (Slot)this.inventorySlots.get(i);
      				System.out.println(slot.inventory);
      				
      			}
      			return super.slotClick(p_75144_1_, p_75144_2_, p_75144_3_, p_75144_4_);
      		}
      
      		/**
      	     * Called when the container is closed.
      	     */
      	    public void onContainerClosed(EntityPlayer p_75134_1_)
      	    {
      	    	
      	        super.onContainerClosed(p_75134_1_);
      
      	        for (int i = 0; i < 18; ++i)
      	        {
      	        	Slot slot = (Slot)this.inventorySlots.get(i);
      	            ItemStack itemstack =slot.getStack();
      
      	            if (itemstack != null)
      	            {
      	                p_75134_1_.dropPlayerItemWithRandomChoice(itemstack,false);
      	            }
      	        }
      
      	        
      
      	        this.inventoryTrade.closeInventory();
      	        
      	    }
      
      	    /**
      	     * Return this chest container's lower chest inventory.
      	     */
      	    public IInventory getLowerChestInventory()
      	    {
      	        return this.inventoryTrade;
      	    }
      }
      

      Je compte évidemment rendre plus propre le code côté Container mais je voudrais d’abord que tout soit ok niveau système. Merci de votre éventuelle aide !

      1 réponse Dernière réponse Répondre Citer 0
      • LeBossMax2
        LeBossMax2 dernière édition par

        Bonjour
        La solution la plus simple à mon avis c’est d’utiliser des capabilities :
        pur chacun des joueurs quand un trade commence, tu met dans la capability un inventaire d’échange où il peut mettre les choses qu’il propose et le joueur avec qui il est en train d’échanger. Dans le guihandler, tu peux accéder à la capability, donc à son inventory de trade et aussi à l’inventory de trade de l’autre joueur.

        1 réponse Dernière réponse Répondre Citer 0
        • A
          AngelSushi dernière édition par

          Merci de ta réponse. Et comment je pourrais faire pour lier les deux inventaires ? Pour que quand le joueur1 mette un item dans un de ses slots ça l’affiche au joueur2 ?

          1 réponse Dernière réponse Répondre Citer 0
          • LeBossMax2
            LeBossMax2 dernière édition par

            Comme j’ai dit, tu accède directement à l’inventaire de trade de l’autre joueur, donc c’est le même inventaire qui est utilisé pour les deux joueurs

            1 réponse Dernière réponse Répondre Citer 0
            • robin4002
              robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par robin4002

              Pas la bonne section et préfixe de version manquante 😢
              J’ai déplacé, merci d’ajouter le préfixe de version.

              De quelle manière sont fait les échanges ? Directement entre les joueurs ? Via un bloc pour ?

              1 réponse Dernière réponse Répondre Citer 0
              • 1 / 1
              • Premier message
                Dernier message
              Design by Woryk
              Contact / Mentions Légales

              MINECRAFT FORGE FRANCE © 2018

              Powered by NodeBB