daily pastebin goal
38%
SHARE
TWEET

Untitled

a guest Jul 10th, 2016 14 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package ed.enderdeath.mod.AnvilDragon;
  2.  
  3. import ed.enderdeath.mod.common.enderdeath;
  4. import net.minecraft.entity.player.EntityPlayer;
  5. import net.minecraft.entity.player.InventoryPlayer;
  6. import net.minecraft.inventory.Container;
  7. import net.minecraft.inventory.IInventory;
  8. import net.minecraft.inventory.InventoryCraftResult;
  9. import net.minecraft.inventory.InventoryCrafting;
  10. import net.minecraft.inventory.Slot;
  11. import net.minecraft.item.ItemStack;
  12. import net.minecraft.world.World;
  13.  
  14. public class ContainerDragonAnvil extends Container
  15. {
  16.  
  17.  
  18.     /** Largeur du craft */
  19.     public static  int craftWidth = 4;
  20.     /** Hauteur du craft */
  21.     public static int craftHeigth = 4;
  22.  
  23.     /** Inventaire contenant le craft */
  24.     public InventoryCrafting craftMatrix = new InventoryCrafting(this, craftWidth, craftHeigth);
  25.     /** Inventaire contenant le résultat du craft */
  26.     public IInventory craftResult = new InventoryCraftResult();
  27.  
  28.     public World worldObj;
  29.     public int pos;
  30.     public int x;
  31.     public int y;
  32.     public int z;
  33.     public int Width;
  34.  
  35.     public ContainerDragonAnvil(InventoryPlayer invPlayer, World world, int pos,int y,int z)
  36.     {
  37.     this.worldObj = world;
  38.     this.pos = pos;
  39.  
  40.     //Ajout du slot pour le résultat
  41.     this.addSlotToContainer(new DragonSlotCrafting(invPlayer.player, craftMatrix, craftResult, 0, 141, 43));
  42.  
  43.     int startX = 8; //Position x ou les slots de craft commencent à être dessinés
  44.     int startY = 7; //Position y ou les slots de craft commencent à être dessinés
  45.     //Ajout des slots de craft
  46.     for (int y1 = 0; y1 < craftHeigth; ++y1)
  47.     {
  48.     for(int x = 0; x < craftWidth; ++x)
  49.     {
  50.     this.addSlotToContainer(new Slot(craftMatrix, x + y1 * craftWidth, startX + x * 18, startY + y1 * 18));
  51.     }
  52.     }
  53.  
  54.     startX = 8; //Position x ou les slots de l'inventaire commencent à être dessinés
  55.     startY = 106; //Position y ou les slots de l'inventaire commencent à être dessinés
  56.     //Ajout des slots de l'inventaire du joueur
  57.     for (int y1 = 0; y1 < 3; ++y1)
  58.     {
  59.     for(int x = 0; x < 9; ++x)
  60.     {
  61.     this.addSlotToContainer(new Slot(invPlayer, x + y1 * 9 + 9, startX + x * 18, startY + y1 * 18));
  62.     }
  63.     }
  64.     startY = 164; //Position y ou les slots de la hotbar commencent à être dessinés
  65.     //Ajout des slots de la hotbar
  66.     for (int x = 0; x < 9; ++x)
  67.     {
  68.     this.addSlotToContainer(new Slot(invPlayer, x, startX + x * 18, startY));
  69.     }
  70.     }
  71.  
  72.     /**
  73.     * Appelé quand la matrice (les slots de craft) change
  74.     */
  75.     @Override
  76.     public void onCraftMatrixChanged(IInventory iiventory)
  77.     {
  78.     //On met le résultat du craft dans le slot de résultat
  79.     craftResult.setInventorySlotContents(0, TutorielCraftingManager.getInstance().findMatchingRecipe(craftMatrix, worldObj));
  80.     }
  81.  
  82.     /**
  83.     * Retourne true si le joueur peut interagir avec ce gui, en général on teste la distance par rapport au joueur dans cette fonction
  84.     */
  85.     @Override
  86.     public boolean canInteractWith(EntityPlayer player)
  87.     {
  88.     return this.worldObj.getBlock(x, y, z) == enderdeath.AnvilDragon;
  89.     }
  90.  
  91.     /**
  92.     * Appelé quand le container est fermé
  93.     */
  94.     @Override
  95.     public void onContainerClosed(EntityPlayer player)
  96.     {
  97.            super.onContainerClosed(player);
  98.            if (!this.worldObj.isRemote) //Si on est sur le serveur, on loot les items à la fermeture du gui
  99.            {
  100.                for (int i = 0; i < 9; ++i)
  101.                {
  102.                    ItemStack itemstack = this.craftMatrix.getStackInSlot(i);
  103.                    if (itemstack != null)
  104.                    {
  105.                        player.dropPlayerItemWithRandomChoice(itemstack, false);
  106.                        //player.dropPlayerItemWithRandomChoice(itemstack, false); //TODO A utiliser en 1.8
  107.                    }
  108.                }
  109.            }
  110.        }
  111.  
  112.     /**
  113.     * Cette fonction est appelée lors du shift+clic (je vous conseille de la laisser comme tel, mais je précise quel ne s'adaptera pas en fonction de la taille du craft)
  114.     */
  115.     @Override
  116.     public ItemStack transferStackInSlot(EntityPlayer player, int slotId)
  117.     {
  118.            ItemStack itemstack = null;
  119.            Slot slot = (Slot) this.inventorySlots.get(slotId);
  120.  
  121.            if (slot != null && slot.getHasStack())
  122.            {
  123.                ItemStack itemstack1 = slot.getStack();
  124.                itemstack = itemstack1.copy();
  125.  
  126.                if (slotId == 0)
  127.                {
  128.                    if (!this.mergeItemStack(itemstack1, 10, 46, true))
  129.                    {
  130.                        return null;
  131.                    }
  132.                    slot.onSlotChange(itemstack1, itemstack);
  133.                }
  134.                else if (slotId >= 10 && slotId < 37)
  135.                {
  136.                    if (!this.mergeItemStack(itemstack1, 37, 46, false))
  137.                    {
  138.                        return null;
  139.                    }
  140.                }
  141.                else if (slotId >= 37 && slotId < 46)
  142.                {
  143.                    if (!this.mergeItemStack(itemstack1, 10, 37, false))
  144.                    {
  145.                        return null;
  146.                    }
  147.                }
  148.                else if (!this.mergeItemStack(itemstack1, 10, 46, false))
  149.                {
  150.                    return null;
  151.                }
  152.                if (itemstack1.stackSize == 0)
  153.                {
  154.                    slot.putStack((ItemStack)null);
  155.                }
  156.                else
  157.                {
  158.                    slot.onSlotChanged();
  159.                }
  160.                if (itemstack1.stackSize == itemstack.stackSize)
  161.                {
  162.                    return null;
  163.                }
  164.  
  165.                slot.onPickupFromSlot(player, itemstack1);
  166.            }
  167.            return itemstack;
  168.        }
  169.  
  170.     /**
  171.     * Appelé quand on double clic sur un slot :
  172.         * Called to determine if the current slot is valid for the stack merging (double-click) code. The stack passed in
  173.         * is null for the initial slot that was double-clicked.
  174.     */
  175.        public boolean canMergeSlot(ItemStack stack, Slot slotIn)
  176.        {
  177.            return slotIn.inventory != this.craftResult && super.canDragIntoSlot(slotIn);
  178.        }
  179. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top