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

    Résolu Problème avec le Gui & Container [1.7.10]

    1.7.x
    1.7.10
    2
    13
    530
    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.
    • Xemnys
      Xemnys dernière édition par Xemnys

      Bonjour à vous,

      Je poste ce message afin d’avoir de l’aide sur un problème de Gui et de Container dans mon mod.
      Le block que j’ai fait est une forge, j’ai tout fait correctement. J’ai réglé quelque problème sauf que j’ai eu un autre problème qui est apparu est que je n’arrive pas à comprendre. Cela vient de la classe du Gui de la forge et du Container voici les codes pour mieux comprendre :

      BlockForgeMod

      public class BlockForgeMod extends Block
      {
      	@SideOnly(Side.CLIENT)
      	private IIcon top;
      	@SideOnly(Side.CLIENT)
      	private IIcon front;
      	
      	private static boolean isBurning;
      	private final boolean isBurning2;
      	private final Random random = new Random();
      	
      	public BlockForgeMod(boolean isActive) 
      	{
      		super(Material.rock);
      		isBurning2 = isActive;
      	}
      	
      	@SideOnly(Side.CLIENT)
      	public void registerBlockIcons(IIconRegister iconregister)
      	{
      		this.blockIcon = iconregister.registerIcon(References.MOD_ID + ":forge_side");
      		this.front = iconregister.registerIcon(this.isBurning2 ? References.MOD_ID + ":forge_active" : References.MOD_ID + ":forge_inactive");
      		this.top = iconregister.registerIcon(References.MOD_ID + ":forge_top");
      	}
      	
      	public IIcon getIcon(int side, int meta)
      	{
      		if(side == 1)
      		{
      			return top;
      		}else if(side == 3)
      		{
      			return front;
      		}else 
      		{
      			return this.blockIcon;
      		}
      	}
      	
      	public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, float par8, float par9)
      	{
      		player.openGui(IrisiumMod.instance, 0, world, x, y, z);
      		return true;
      	}
      	
      	public Item getItemDropped(int par1, Random random, int par3)
      	{
      		return Item.getItemFromBlock(ModBlocks.forge);
      	}
      	
      	public Item getItem(World world , int par2, int par3, int par4)
      	{
      		return Item.getItemFromBlock(ModBlocks.forge);
      	}
      	
      	@SideOnly(Side.CLIENT)
      	public void onBlockAdded(World world, int x, int y, int z)
      	{
      		super.onBlockAdded(world, x, y, z);
      		this.direction(world, x, y, z);
      	}
      
      	private void direction(World world, int x, int y, int z) 
      	{
      		if(!world.isRemote)
      		{
      			Block direction = world.getBlock(x, y, z -1);
      			Block direction1 = world.getBlock(x, y, z +1);
      			Block direction2 = world.getBlock(x -1, y, z);
      			Block direction3 = world.getBlock(x +1, y, z);
      			byte byte0 = 3;
      			
      			if(direction.func_149730_j() && direction.func_149730_j())
      			{
      				byte0 = 3;
      			}
      			
      			if(direction1.func_149730_j() && direction1.func_149730_j())
      			{
      				byte0 = 2;
      			}
      			
      			if(direction2.func_149730_j() && direction2.func_149730_j())
      			{
      				byte0 = 5;
      			}
      			
      			if(direction3.func_149730_j() && direction3.func_149730_j())
      			{
      				byte0 = 4;
      			}
      			
      			world.setBlockMetadataWithNotify(x, y, z, byte0, 2);
      		}
      	}
      	
      	public void onBlockPlaceBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack itemstack)
      	{
      		int direction = MathHelper.floor_double((double)(entity.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
      		
      		if(direction == 0)
      		{
      			world.setBlockMetadataWithNotify(x, y, z, 2, 2);
      		}
      		
      		if(direction == 1)
      		{
      			world.setBlockMetadataWithNotify(x, y, z, 5, 2);
      		}
      		
      		if(direction == 2)
      		{
      			world.setBlockMetadataWithNotify(x, y, z, 3, 2);
      		}
      		
      		if(direction == 3)
      		{
      			world.setBlockMetadataWithNotify(x, y, z, 4, 2);
      		}
      		
      		if(itemstack.hasDisplayName())
      		{
      			((TileEntityForge) world.getTileEntity(x, y, z)).func_145951_a(itemstack.getDisplayName());
      		}
      	}
      	
      	public static void updateBlockState(boolean burning, World world, int x, int y, int z)
      	{
      		int direction = world.getBlockMetadata(x, y, z);
      		TileEntity tileentity = world.getTileEntity(x, y, z);
      		isBurning = true;
      		
      		if(burning)
      		{
      			world.setBlock(x, y, z, ModBlocks.forge_active);
      		}else {
      			world.setBlock(x, y, z, ModBlocks.forge);
      		}
      		
      		isBurning = false;
      		world.setBlockMetadataWithNotify(x, y, z, direction, 2);
      		
      		if(tileentity != null)
      		{
      			tileentity.validate();
      			world.setTileEntity(x, y, z, tileentity);
      		}
      	}
      	
      	public void breakBlock(World world, int x, int y, int z, Block block, int meta)
      	{
      		if(!isBurning)
      		{
      			TileEntityForge tileentityforge = (TileEntityForge) world.getTileEntity(x, y, z);
      			
      			if(tileentityforge != null)
      			{
      				for(int i = 0; i < tileentityforge.getInventorySize; ++i)
      				{
      					ItemStack itemstack = tileentityforge.getStackInSlot(i);
      					if(itemstack != null)
      					{
      						float f = this.random.nextFloat() * 0.6F + 0.1F;
      						float f1 = this.random.nextFloat() * 0.6F + 0.1F;
      						float f2 = this.random.nextFloat() * 0.6F + 0.1F;
      						
      						while(itemstack.stackSize > 0)
      						{
      							int j = this.random.nextInt(21) + 10;
      							
      							if(j > itemstack.stackSize)
      							{
      								j = itemstack.stackSize;
      							}
      							
      							itemstack.stackSize -= j;
      							EntityItem entityitem = new EntityItem(world, (double) ((float) x + f), (double) ((float) y + f1), (double) ((float) z + f2), new ItemStack(itemstack.getItem(), j, itemstack.getItemDamage()));
      							
      							if(itemstack.hasTagCompound())
      							{
      								entityitem.getEntityItem().setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy());
      							}
      							
      							float f3 = 0.025F;
      							entityitem.motionX = (double) ((float) this.random.nextGaussian() * f3);
      							entityitem.motionY = (double) ((float) this.random.nextGaussian() * f3 + 0.1F);
      							entityitem.motionZ = (double) ((float) this.random.nextGaussian() * f3);
      							world.spawnEntityInWorld(entityitem);
      						}
      					}
      				}
      				world.func_147453_f(x, y, z, block);
      			}
      		}
      		super.breakBlock(world, x, y, z, block, meta);
      	}
      	
      	@SideOnly(Side.CLIENT)
      	public void randomDisplayTick(World world, int x, int y, int z, Random random)
      	{
      		if(this.isBurning2)
      		{
      			int direction = world.getBlockMetadata(x, y, z);
      			
      			float xx = (float) x + 0.5F, yy = (float) y + random.nextFloat() * 6.0F / 16.0F, zz = (float) z + 0.5F, xx2 = random.nextFloat() * 0.3F - 0.2F, zz2 = 0.5F;
      				
      			if (direction == 4)
      			{
      				world.spawnParticle("smoke", (double) (xx - xx2), (double) yy, (double) (zz + xx2), 0.0F, 0.0F, 0.0F);
      				world.spawnParticle("flame", (double) (xx - xx2), (double) yy, (double) (zz + xx2), 0.0F, 0.0F, 0.0F);
      			} else if (direction == 5) 
      			{
      				world.spawnParticle("smoke", (double) (xx - xx2), (double) yy, (double) (zz + xx2), 0.0F, 0.0F, 0.0F);
      				world.spawnParticle("flame", (double) (xx - xx2), (double) yy, (double) (zz + xx2), 0.0F, 0.0F, 0.0F);
      			} else if (direction == 3) 
      			{
      				world.spawnParticle("smoke", (double) (xx - xx2), (double) yy, (double) (zz + xx2), 0.0F, 0.0F, 0.0F);
      				world.spawnParticle("flame", (double) (xx - xx2), (double) yy, (double) (zz + xx2), 0.0F, 0.0F, 0.0F);
      			} else if (direction == 2) 
      			{
      				world.spawnParticle("smoke", (double) (xx - xx2), (double) yy, (double) (zz + xx2), 0.0F, 0.0F, 0.0F);
      				world.spawnParticle("flame", (double) (xx - xx2), (double) yy, (double) (zz + xx2), 0.0F, 0.0F, 0.0F);
      			}
      		}
      	}
      }
      

      TileEntityForge

      public class TileEntityForge extends TileEntity implements ISidedInventory
      {
      	
      	private static final int[] slotsTop = new int[] { 0 };
      	private static final int[] slotsBottom = new int[] { 2, 1 };
      	private static final int[] slotsSides = new int[] { 1 };
      
      	private ItemStack[] furnaceItemStacks = new ItemStack[3];
      
      	public int furnaceBurnTime;
      	public int currentBurnTime;
      	public int furnaceCookTime;
      
      	private String furnaceName;
      	public int getInventorySize;
      
      	public void furnaceName(String string){
      		this.furnaceName = string;
      	}
      	
      	@Override
      	public int getSizeInventory() {
      		return this.furnaceItemStacks.length;
      	}
      
      	@Override
      	public ItemStack getStackInSlot(int slot) {
      		return this.furnaceItemStacks[slot];
      	}
      
      	@Override
      	public ItemStack decrStackSize(int par1, int par2) {
      		if (this.furnaceItemStacks[par1] != null) {
      			ItemStack itemstack;
      			if (this.furnaceItemStacks[par1].stackSize <= par2) {
      				itemstack = this.furnaceItemStacks[par1];
      				this.furnaceItemStacks[par1] = null;
      				return itemstack;
      			} else {
      				itemstack = this.furnaceItemStacks[par1].splitStack(par2);
      				
      				if (this.furnaceItemStacks[par1].stackSize == 0) {
      					this.furnaceItemStacks[par1] = null;
      				}
      				return itemstack;
      			}
      		} else {
      			return null;
      		}
      	}
      	
      	@Override
      	public ItemStack getStackInSlotOnClosing(int slot) {
      		if (this.furnaceItemStacks[slot] != null) {
      			ItemStack itemstack = this.furnaceItemStacks[slot];
      			this.furnaceItemStacks[slot] = null;
      			return itemstack;
      		} else {
      			return null;
      		}
      	}
      
      	@Override
      	public void setInventorySlotContents(int slot, ItemStack itemstack) {
      		this.furnaceItemStacks[slot] = itemstack;
      
      		if (itemstack != null && itemstack.stackSize > this.getInventoryStackLimit()) {
      			itemstack.stackSize = this.getInventoryStackLimit();
      		}
      
      	}
      
      	@Override
      	public String getInventoryName() {
      		return this.hasCustomInventoryName() ? this.furnaceName : "Tut Furnace";
      	}
      
      	@Override
      	public boolean hasCustomInventoryName() {
      		return this.furnaceName != null && this.furnaceName.length() > 0;
      	}
      
      	@Override
      	public int getInventoryStackLimit() {
      		return 64;
      	}
      
      	public void readFromNBT(NBTTagCompound tagCompound) {
      		super.readFromNBT(tagCompound);
      		NBTTagList tagList = tagCompound.getTagList("Items", 10);
      		this.furnaceItemStacks = new ItemStack[this.getSizeInventory()];
      
      		for (int i = 0; i < tagList.tagCount(); ++i) {
      			NBTTagCompound tabCompound1 = tagList.getCompoundTagAt(i);
      			byte byte0 = tabCompound1.getByte("Slot");
      
      			if (byte0 >= 0 && byte0 < this.furnaceItemStacks.length) {
      				this.furnaceItemStacks[byte0] = ItemStack.loadItemStackFromNBT(tabCompound1);
      			}
      		}
      
      		this.furnaceBurnTime = tagCompound.getShort("BurnTime");
      		this.furnaceCookTime = tagCompound.getShort("CookTime");
      		this.currentBurnTime = getItemBurnTime(this.furnaceItemStacks[1]);
      
      		if (tagCompound.hasKey("CustomName", 8)) {
      			this.furnaceName = tagCompound.getString("CustomName");
      		}
      	}
      
      	public void writeToNBT(NBTTagCompound tagCompound) {
      		super.writeToNBT(tagCompound);
      		tagCompound.setShort("BurnTime", (short) this.furnaceBurnTime);
      		tagCompound.setShort("CookTime", (short) this.furnaceBurnTime);
      		NBTTagList tagList = new NBTTagList();
      
      		for (int i = 0; i < this.furnaceItemStacks.length; ++i) {
      			if (this.furnaceItemStacks[i] != null) {
      				NBTTagCompound tagCompound1 = new NBTTagCompound();
      				tagCompound1.setByte("Slot", (byte) i);
      				this.furnaceItemStacks[i].writeToNBT(tagCompound1);
      				tagList.appendTag(tagCompound1);
      			}
      		}
      
      		tagCompound.setTag("Items", tagList);
      
      		if (this.hasCustomInventoryName()) {
      			tagCompound.setString("CustomName", this.furnaceName);
      		}
      	}
      
      	@SideOnly(Side.CLIENT)
      	public int getCookProgressScaled(int par1) {
      		return this.furnaceCookTime * par1 / 200;
      	}
      
      	@SideOnly(Side.CLIENT)
      	public int getBurnTimeRemainingScaled(int par1) {
      		if (this.currentBurnTime == 0) {
      			this.currentBurnTime = 200;
      		}
      
      		return this.furnaceBurnTime * par1 / this.currentBurnTime;
      	}
      
      	public boolean isBurning() {
      		return this.furnaceBurnTime > 0;
      	}
      
      	public void updateEntity() {
      		boolean flag = this.furnaceBurnTime > 0;
      		boolean flag1 = false;
      
      		if (this.furnaceBurnTime > 0) {
      			--this.furnaceBurnTime;
      		}
      
      		if (!this.worldObj.isRemote) {
      			if (this.furnaceBurnTime == 0 && this.canSmelt()) {
      				this.currentBurnTime = this.furnaceBurnTime = getItemBurnTime(this.furnaceItemStacks[1]);
      
      				if (this.furnaceBurnTime > 0) {
      					flag1 = true;
      					if (this.furnaceItemStacks[1] != null) {
      						--this.furnaceItemStacks[1].stackSize;
      
      						if (this.furnaceItemStacks[1].stackSize == 0) {
      							this.furnaceItemStacks[1] = furnaceItemStacks[1].getItem().getContainerItem(this.furnaceItemStacks[1]);
      						}
      					}
      				}
      			}
      
      			if (this.isBurning() && this.canSmelt()) {
      				++this.furnaceCookTime;
      				if (this.furnaceCookTime == 200) {
      					this.furnaceCookTime = 0;
      					this.smeltItem();
      					flag1 = true;
      				}
      			} else {
      				this.furnaceCookTime = 0;
      			}
      		}
      
      		if (flag != this.furnaceBurnTime > 0) {
      			flag1 = true;
      			BlockForgeMod.updateBlockState(this.furnaceBurnTime > 0, this.worldObj, this.xCoord, this.yCoord, this.zCoord);
      		}
      
      		if (flag1) {
      			this.markDirty();
      		}
      	}
      
      	private boolean canSmelt() {
      		if (this.furnaceItemStacks[0] == null) {
      			return false;
      		} else {
      			ItemStack itemstack = ForgeRecipes.smelting().getSmeltingResult(this.furnaceItemStacks[0]);
      			if (itemstack == null) return false;
      			if (this.furnaceItemStacks[2] == null) return true;
      			if (!this.furnaceItemStacks[2].isItemEqual(itemstack)) return false;
      			int result = furnaceItemStacks[2].stackSize + itemstack.stackSize;
      			return result <= getInventoryStackLimit() && result <= this.furnaceItemStacks[2].getMaxStackSize();
      		}
      	}
      
      	public void smeltItem() {
      		if (this.canSmelt()) {
      			ItemStack itemstack = ForgeRecipes.smelting().getSmeltingResult(this.furnaceItemStacks[0]);
      
      			if (this.furnaceItemStacks[2] == null) {
      				this.furnaceItemStacks[2] = itemstack.copy();
      			} else if (this.furnaceItemStacks[2].getItem() == itemstack.getItem()) {
      				this.furnaceItemStacks[2].stackSize += itemstack.stackSize;
      			}
      			
      			--this.furnaceItemStacks[0].stackSize;
      			
      			if(this.furnaceItemStacks[0].stackSize >= 0){
      				this.furnaceItemStacks[0] = null;
      			}
      		}
      	}
      	
      	public static int getItemBurnTime(ItemStack itemstack){
      		if(itemstack == null){
      			return 0;
      		}else{
      			Item item = itemstack.getItem();
      			
      			if(item instanceof ItemBlock && Block.getBlockFromItem(item) != Blocks.air){
      				Block block = Block.getBlockFromItem(item);
      				
      				if(block == ModBlocks.steel_block){
      					return 200;
      				}
      				
      				if(block.getMaterial() == Material.rock){
      					return 300;
      				}
      			}
      			
      			if(item == ModItems.steel_helmet) return 1600;
      			if(item instanceof ItemTool && ((ItemTool) item).getToolMaterialName().equals("EMERALD")) return 300;
      			return GameRegistry.getFuelValue(itemstack);
      		}
      	}
      
      	public static boolean isItemFuel(ItemStack itemstack){
      		return getItemBurnTime(itemstack) > 0;
      	}
      	
      	@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 par1, ItemStack itemstack) {
      		return par1 == 2 ? false : (par1 == 1 ? isItemFuel(itemstack) : true);
      	}
      
      	@Override
      	public int[] getAccessibleSlotsFromSide(int par1) {
      		return par1 == 0 ? slotsBottom : (par1 == 1 ? slotsTop : slotsSides);
      	}
      
      	@Override
      	public boolean canInsertItem(int par1, ItemStack itemstack, int par3) {
      		return this.isItemValidForSlot(par1, itemstack);
      	}
      
      	@Override
      	public boolean canExtractItem(int par1, ItemStack itemstack, int par3) {
      		return par3 != 0 || par1 != 1 || itemstack.getItem() == Items.bucket;
      	}
      
      	public void func_145951_a(String displayName) {
      		
      	}
      	
      }
      

      ContainerForge

      public class ContainerForge extends Container
      {
      	private TileEntityForge tileFurnace;
      	private int lastCookTime;
      	private int lastBurnTime;
      	private int lastItemBurnTime;
      	
      	public ContainerForge(InventoryPlayer player, TileEntityForge tileEntityFurnace){
      		this.tileFurnace = tileEntityFurnace;
      		this.addSlotToContainer(new Slot(tileEntityFurnace, 0, 56, 17));
      		this.addSlotToContainer(new Slot(tileEntityFurnace, 1, 56, 53));
      		this.addSlotToContainer(new SlotFurnace(player.player, tileEntityFurnace, 2, 116, 35));
      		int i;
      		
      		for(i = 0; i < 3; ++i){
      			for(int j = 0; j < 9; ++j){
      				this.addSlotToContainer(new Slot(player, j + i * 9 + 9, 8 + j * 18, 84 + i * 18));
      			}
      		}
      		
      		for(i = 0; i < 9; ++i){
      			this.addSlotToContainer(new Slot(player, i , 8 + i * 18 , 142));
      		}
      	}
      
      	public void addCraftingToCrafters(ICrafting craft){
      		super.addCraftingToCrafters(craft);
      		craft.sendProgressBarUpdate(this, 0, this.tileFurnace.furnaceCookTime);
      		craft.sendProgressBarUpdate(this, 1, this.tileFurnace.furnaceBurnTime);
      		craft.sendProgressBarUpdate(this, 2, this.tileFurnace.currentBurnTime);
      	}
      	
      	public void detectAndSendChanges(){
      		super.detectAndSendChanges();
      		for(int i = 0; i < this.crafters.size(); ++i){
      			ICrafting craft = (ICrafting) this.crafters.get(i);
      			
      			if(this.lastCookTime != this.tileFurnace.furnaceCookTime){
      				craft.sendProgressBarUpdate(this, 0, this.tileFurnace.furnaceCookTime);
      			}
      			
      			if(this.lastBurnTime != this.tileFurnace.furnaceBurnTime){
      				craft.sendProgressBarUpdate(this, 1, this.tileFurnace.furnaceBurnTime);
      			}
      			
      			if(this.lastItemBurnTime != this.tileFurnace.currentBurnTime){
      				craft.sendProgressBarUpdate(this, 2, this.tileFurnace.currentBurnTime);
      			}
      		}
      		
      		this.lastBurnTime = this.tileFurnace.furnaceBurnTime;
      		this.lastCookTime = this.tileFurnace.furnaceCookTime;
      		this.lastItemBurnTime = this.tileFurnace.currentBurnTime;
      	}
      	
      	@SideOnly(Side.CLIENT)
      	public void updateProgressBar(int par1, int par2){
      		if(par1 == 0){
      			this.tileFurnace.furnaceCookTime = par2;
      		}
      		
      		if(par1 == 1){
      			this.tileFurnace.furnaceBurnTime = par2;
      		}
      		
      		if(par1 == 2){
      			this.tileFurnace.currentBurnTime = par2;
      		}
      	}
      	
      	@Override
      	public boolean canInteractWith(EntityPlayer player) {
      		return this.tileFurnace.isUseableByPlayer(player);
      	}
      	
      	public ItemStack transferStackInSlot(EntityPlayer player, int par2){
      		ItemStack itemstack = null;
      		Slot slot = (Slot) this.inventorySlots.get(par2);
      		
      		if(slot != null && slot.getHasStack()){
      			ItemStack itemstack1 = slot.getStack();
      			itemstack = itemstack1.copy();
      			
      			if(par2 == 2){
      				if(!this.mergeItemStack(itemstack1, 3, 39, true)){
      					return null;
      				}
      				slot.onSlotChange(itemstack1, itemstack);
      			}else if(par2 != 1 && par2 != 0){
      				if(ForgeRecipes.smelting().getSmeltingResult(itemstack1) != null){
      					if(!this.mergeItemStack(itemstack1, 0, 1, false)){
      						return null;
      					}
      				}else if(TileEntityForge.isItemFuel(itemstack1)){
      					if(!this.mergeItemStack(itemstack1, 1, 2, false)){
      						return null;
      					}
      				}else if(par2 >=3 && par2 < 30){
      					if(!this.mergeItemStack(itemstack1, 30, 39, false)){
      						return null;
      					}
      				}else if(par2 >= 30 && par2 < 39 && !this.mergeItemStack(itemstack1, 3, 30, false)){
      					return null;
      				}
      			}else if(!this.mergeItemStack(itemstack1, 3, 39, false)){
      				return null;
      			}
      			if(itemstack1.stackSize == 0){
      				slot.putStack((ItemStack)null);
      			}else{
      				slot.onSlotChanged();
      			}
      			if(itemstack1.stackSize == itemstack.stackSize){
      				return null;
      			}
      			slot.onPickupFromSlot(player, itemstack1);
      		}
      		return itemstack;
      	}
      }
      

      GuiForge

      @SideOnly(Side.CLIENT)
      public class GuiForge extends GuiContainer
      {
      	private static final ResourceLocation forgeGuiTextures = new ResourceLocation("textures/gui/forge.png");
      	private TileEntityForge tileForge;
      
      	public GuiForge(InventoryPlayer invPlayer, TileEntityForge tile) {
      		super(new ContainerForge(invPlayer, tile));
      		this.tileForge = tile;
      		
      	}
      	
      	protected void drawGuiContainerForegroundLayer(int par1, int par2){
      		String string = this.tileForge.hasCustomInventoryName() ? this.tileForge.getInventoryName() : I18n.format(this.tileForge.getInventoryName(), new Object[0]);
      		this.fontRendererObj.drawString(string, this.xSize / 2 - this.fontRendererObj.getStringWidth(string), 6, 4210752);
      		this.fontRendererObj.drawString(I18n.format("container.inventory", new Object[0]), 8, this.ySize - 94, 4210752);
      	}
      
      	@Override
      	protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) {
      		 GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
      	        this.mc.getTextureManager().bindTexture(forgeGuiTextures);
      	        int k = (this.width - this.xSize) / 2;
      	        int l = (this.height - this.ySize) / 2;
      	        this.drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize);
      	        int i1;
      
      	        if (this.tileForge.isBurning())
      	        {
      	            i1 = this.tileForge.getBurnTimeRemainingScaled(12);
      	            this.drawTexturedModalRect(k + 56, l + 36 + 12 - i1, 176, 12 - i1, 14, i1 + 2);
      	        }
      
      	        i1 = this.tileForge.getCookProgressScaled(24);
      	        this.drawTexturedModalRect(k + 79, l + 34, 176, 14, i1 + 1, 16);
      	}
      }
      

      Voici aussi le crash-raport pour vous aidez aussi :

      ---- Minecraft Crash Report ----
      // Daisy, daisy...
      
      Time: 02/01/19 12:37
      Description: Rendering screen
      
      java.lang.NullPointerException: Rendering screen
      	at fr.irisium.irisiummod.gui.GuiForge.drawGuiContainerBackgroundLayer(GuiForge.java:43)
      	at net.minecraft.client.gui.inventory.GuiContainer.drawScreen(GuiContainer.java:93)
      	at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1137)
      	at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1067)
      	at net.minecraft.client.Minecraft.run(Minecraft.java:962)
      	at net.minecraft.client.main.Main.main(Main.java:164)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
      	at java.lang.reflect.Method.invoke(Unknown Source)
      	at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
      	at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
      	at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source)
      	at GradleStart.main(Unknown Source)
      
      
      A detailed walkthrough of the error, its code path and all known details is as follows:
      ---------------------------------------------------------------------------------------
      
      -- Head --
      Stacktrace:
      	at fr.irisium.irisiummod.gui.GuiForge.drawGuiContainerBackgroundLayer(GuiForge.java:43)
      	at net.minecraft.client.gui.inventory.GuiContainer.drawScreen(GuiContainer.java:93)
      
      -- Screen render details --
      Details:
      	Screen name: fr.irisium.irisiummod.gui.GuiForge
      	Mouse location: Scaled: (341, 176). Absolute: (683, 352)
      	Screen size: Scaled: (683, 353). Absolute: (1366, 705). Scale factor of 2
      
      -- Affected level --
      Details:
      	Level name: MpServer
      	All players: 1 total; [EntityClientPlayerMP['Player101'/15, l='MpServer', x=-487,48, y=5,62, z=744,14]]
      	Chunk stats: MultiplayerChunkCache: 289, 289
      	Level seed: 0
      	Level generator: ID 01 - flat, ver 0. Features enabled: false
      	Level generator options: 
      	Level spawn location: World: (-488,4,747), Chunk: (at 8,0,11 in -31,46; contains blocks -496,0,736 to -481,255,751), Region: (-1,1; contains chunks -32,32 to -1,63, blocks -512,0,512 to -1,255,1023)
      	Level time: 3139 game time, 3139 day time
      	Level dimension: 0
      	Level storage version: 0x00000 - Unknown?
      	Level weather: Rain time: 0 (now: false), thunder time: 0 (now: false)
      	Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: false
      	Forced entities: 63 total; [EntitySheep['Sheep'/61184, l='MpServer', x=-530,44, y=4,00, z=801,78], EntitySheep['Sheep'/61185, l='MpServer', x=-528,22, y=4,00, z=796,50], EntitySheep['Sheep'/61186, l='MpServer', x=-529,81, y=4,00, z=796,50], EntitySheep['Sheep'/61187, l='MpServer', x=-537,50, y=4,00, z=795,50], EntitySheep['Sheep'/61188, l='MpServer', x=-537,50, y=4,00, z=793,50], EntitySheep['Sheep'/61189, l='MpServer', x=-534,50, y=4,00, z=791,50], EntitySheep['Sheep'/61190, l='MpServer', x=-534,50, y=4,00, z=788,50], EntitySheep['Sheep'/61194, l='MpServer', x=-409,50, y=4,00, z=732,50], EntitySheep['Sheep'/61199, l='MpServer', x=-408,72, y=4,00, z=719,88], EntitySheep['Sheep'/61200, l='MpServer', x=-409,91, y=4,00, z=719,50], EntitySheep['Sheep'/61082, l='MpServer', x=-428,81, y=4,00, z=824,22], EntitySheep['Sheep'/61084, l='MpServer', x=-431,50, y=4,00, z=823,50], EntitySheep['Sheep'/61085, l='MpServer', x=-430,50, y=4,00, z=821,78], EntityCow['Cow'/61087, l='MpServer', x=-430,69, y=4,00, z=820,50], EntitySheep['Sheep'/61215, l='MpServer', x=-496,13, y=4,00, z=809,25], EntitySheep['Sheep'/61216, l='MpServer', x=-493,75, y=4,00, z=806,44], EntityCow['Cow'/61089, l='MpServer', x=-432,19, y=4,00, z=808,25], EntitySheep['Sheep'/61217, l='MpServer', x=-499,59, y=4,00, z=807,59], EntitySheep['Sheep'/61218, l='MpServer', x=-497,34, y=4,00, z=809,63], EntityCow['Cow'/61219, l='MpServer', x=-496,41, y=4,00, z=805,09], EntityCow['Cow'/61220, l='MpServer', x=-497,28, y=4,00, z=808,41], EntityCow['Cow'/61221, l='MpServer', x=-502,50, y=4,00, z=802,50], EntityCow['Cow'/61222, l='MpServer', x=-499,19, y=4,00, z=801,50], EntityHorse['Horse'/61223, l='MpServer', x=-488,25, y=4,00, z=805,66], EntityHorse['Horse'/61225, l='MpServer', x=-500,81, y=4,00, z=805,38], EntityHorse['Horse'/61226, l='MpServer', x=-490,87, y=4,00, z=809,13], EntityClientPlayerMP['Player101'/15, l='MpServer', x=-487,48, y=5,62, z=744,14], EntitySheep['Sheep'/61275, l='MpServer', x=-553,38, y=4,00, z=701,25], EntitySheep['Sheep'/61276, l='MpServer', x=-554,50, y=4,00, z=698,50], EntitySheep['Sheep'/61277, l='MpServer', x=-556,22, y=4,00, z=689,16], EntitySheep['Sheep'/61278, l='MpServer', x=-543,91, y=4,00, z=704,94], EntityCow['Cow'/61279, l='MpServer', x=-556,22, y=4,00, z=706,50], EntityCow['Cow'/61280, l='MpServer', x=-553,50, y=4,00, z=706,50], EntityCow['Cow'/61281, l='MpServer', x=-547,06, y=4,00, z=702,34], EntityCow['Cow'/61154, l='MpServer', x=-439,66, y=4,00, z=677,94], EntityCow['Cow'/61282, l='MpServer', x=-559,50, y=4,00, z=705,50], EntityCow['Cow'/61155, l='MpServer', x=-443,72, y=4,00, z=674,69], EntityCow['Cow'/61156, l='MpServer', x=-439,97, y=4,00, z=679,69], EntityCow['Cow'/61284, l='MpServer', x=-547,25, y=4,00, z=703,56], EntityCow['Cow'/61157, l='MpServer', x=-443,50, y=4,00, z=681,50], EntitySheep['Sheep'/61158, l='MpServer', x=-444,50, y=4,00, z=678,50], EntityCow['Cow'/61286, l='MpServer', x=-557,81, y=4,00, z=706,50], EntitySheep['Sheep'/61159, l='MpServer', x=-442,50, y=4,00, z=679,50], EntitySheep['Sheep'/61160, l='MpServer', x=-446,50, y=4,00, z=676,50], EntityCow['Cow'/61288, l='MpServer', x=-560,50, y=4,00, z=710,50], EntitySheep['Sheep'/61161, l='MpServer', x=-442,69, y=4,00, z=676,66], EntityCow['Cow'/61162, l='MpServer', x=-438,34, y=4,00, z=680,66], EntityCow['Cow'/61163, l='MpServer', x=-440,94, y=4,00, z=677,19], EntityChicken['Chicken'/61166, l='MpServer', x=-511,09, y=4,00, z=754,69], EntitySheep['Sheep'/61167, l='MpServer', x=-451,22, y=4,00, z=755,78], EntitySheep['Sheep'/61168, l='MpServer', x=-456,22, y=4,00, z=758,22], EntitySheep['Sheep'/61169, l='MpServer', x=-457,50, y=4,00, z=760,78], EntitySheep['Sheep'/61170, l='MpServer', x=-457,81, y=4,00, z=759,50], EntityChicken['Chicken'/61171, l='MpServer', x=-453,50, y=4,00, z=751,50], EntityChicken['Chicken'/61172, l='MpServer', x=-452,50, y=4,00, z=751,50], EntityChicken['Chicken'/61174, l='MpServer', x=-451,59, y=4,00, z=743,38], EntitySheep['Sheep'/61176, l='MpServer', x=-456,84, y=4,00, z=751,81], EntitySheep['Sheep'/61177, l='MpServer', x=-453,50, y=4,00, z=757,50], EntitySheep['Sheep'/61178, l='MpServer', x=-448,50, y=4,00, z=758,50], EntityChicken['Chicken'/61179, l='MpServer', x=-530,50, y=4,00, z=798,50], EntityChicken['Chicken'/61180, l='MpServer', x=-534,41, y=4,00, z=803,44], EntityChicken['Chicken'/61182, l='MpServer', x=-523,50, y=4,00, z=802,50], EntitySheep['Sheep'/61183, l='MpServer', x=-532,50, y=4,00, z=798,50]]
      	Retry entities: 0 total; []
      	Server brand: fml,forge
      	Server type: Integrated singleplayer server
      Stacktrace:
      	at net.minecraft.client.multiplayer.WorldClient.addWorldInfoToCrashReport(WorldClient.java:415)
      	at net.minecraft.client.Minecraft.addGraphicsAndWorldToCrashReport(Minecraft.java:2566)
      	at net.minecraft.client.Minecraft.run(Minecraft.java:984)
      	at net.minecraft.client.main.Main.main(Main.java:164)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
      	at java.lang.reflect.Method.invoke(Unknown Source)
      	at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
      	at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
      	at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source)
      	at GradleStart.main(Unknown Source)
      
      ---- Minecraft Crash Report ----
      // Everything's going to plan. No, really, that was supposed to happen.
      
      Time: 02/01/19 12:37
      Description: Ticking memory connection
      
      java.lang.NullPointerException: Ticking memory connection
      	at net.minecraft.inventory.Slot.getStack(Slot.java:88)
      	at net.minecraft.inventory.Container.getInventory(Container.java:67)
      	at net.minecraft.inventory.Container.addCraftingToCrafters(Container.java:53)
      	at fr.irisium.irisiummod.container.ContainerForge.addCraftingToCrafters(ContainerForge.java:43)
      	at cpw.mods.fml.common.network.internal.FMLNetworkHandler.openGui(FMLNetworkHandler.java:88)
      	at net.minecraft.entity.player.EntityPlayer.openGui(EntityPlayer.java:2501)
      	at fr.irisium.irisiummod.block.BlockForgeMod.onBlockActivated(BlockForgeMod.java:66)
      	at net.minecraft.server.management.ItemInWorldManager.activateBlockOrUseItem(ItemInWorldManager.java:409)
      	at net.minecraft.network.NetHandlerPlayServer.processPlayerBlockPlacement(NetHandlerPlayServer.java:593)
      	at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:74)
      	at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:122)
      	at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241)
      	at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182)
      	at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726)
      	at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614)
      	at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118)
      	at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485)
      	at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752)
      
      
      A detailed walkthrough of the error, its code path and all known details is as follows:
      ---------------------------------------------------------------------------------------
      
      -- Head --
      Stacktrace:
      	at net.minecraft.inventory.Slot.getStack(Slot.java:88)
      	at net.minecraft.inventory.Container.getInventory(Container.java:67)
      	at net.minecraft.inventory.Container.addCraftingToCrafters(Container.java:53)
      	at fr.irisium.irisiummod.container.ContainerForge.addCraftingToCrafters(ContainerForge.java:43)
      	at cpw.mods.fml.common.network.internal.FMLNetworkHandler.openGui(FMLNetworkHandler.java:88)
      	at net.minecraft.entity.player.EntityPlayer.openGui(EntityPlayer.java:2501)
      	at fr.irisium.irisiummod.block.BlockForgeMod.onBlockActivated(BlockForgeMod.java:66)
      	at net.minecraft.server.management.ItemInWorldManager.activateBlockOrUseItem(ItemInWorldManager.java:409)
      	at net.minecraft.network.NetHandlerPlayServer.processPlayerBlockPlacement(NetHandlerPlayServer.java:593)
      	at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:74)
      	at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:122)
      	at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241)
      
      -- Ticking connection --
      Details:
      	Connection: net.minecraft.network.NetworkManager@6e7d5cd6
      Stacktrace:
      	at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182)
      	at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726)
      	at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614)
      	at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118)
      	at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485)
      	at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752)
      

      Je vous remercie d’avance,
      Cordialement, Xemnys

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

        Bonjou,
        Dommage d’avoir coupé les importations, ça rend faux les numéros de ligne du code.
        À quoi correspond la ligne 43 de la classe GuiForge.java ? Le NullPointerException est déclenché par cette dernière.

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

          Bonjour,

          Je n’ai pas coupé le code, je n’ai juste pas tout pris le code (les imports et autres) mais la ligne 43 est au faite la ligne 28 pour le Gui

          Cordialement, Xemnys

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

            @Xemnys a dit dans Problème avec le Gui & Container [1.7.10] :

            Je n’ai pas coupé le code, je n’ai juste pas tout pris le code (les imports et autres)

            Imprimes ta classe sur une feuille de papier et coupe-là juste après les importations. Tu aura exactement le résultat qu’ici, c’est pour ça que j’ai dit “Dommage d’avoir coupé les importations”.


            Cela correspond à ça :
            if (this.tileForge.isBurning())
            tileForge est donc null, tu peux envoyer le code de ton guihandler ?

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

              D’accord, voici le code du GuiHandler :

              import cpw.mods.fml.common.network.IGuiHandler;
              import fr.irisium.irisiummod.container.ContainerForge;
              import fr.irisium.irisiummod.gui.GuiForge;
              import fr.irisium.irisiummod.tileentity.TileEntityForge;
              import net.minecraft.entity.player.EntityPlayer;
              import net.minecraft.world.World;
              
              public class GuiHandler implements IGuiHandler
              {
              public GuiHandler (){
              		
              	}
              	
              	@Override
              	public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
              		if(ID == 0){
              			TileEntityForge tileEntityForge = (TileEntityForge) world.getTileEntity(x, y, z);
              			return new ContainerForge(player.inventory, tileEntityForge);
              		}
              		return null;
              	}
              
              	@Override
              	public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
              		if(ID == 0){
              			TileEntityForge tileEntityForgeContainer = (TileEntityForge) world.getTileEntity(x, y, z);
              			return new GuiForge(player.inventory, tileEntityForgeContainer);
              		}
              		return null;
              	}
              
              }
              

              Merci d’avoir pris du temps pour répondre à mon problème,
              Cordialement, Xemnys

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

                Aucun problème ici, le seul moyen d’avoir un NPE est que world.getTileEntity(x, y, z) renvoie null.

                Et en remontant à la classe de ton bloc, en effet à aucun moment tu n’indiques que ton bloc a un tile entity (il faut implémenter les méthodes hasTileEntity et createTileEntity

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

                  Bonsoir,
                  J’ai fait comme vous me l’avez dit, d’ajouter les méthodes hasTileEntity et createTileEntity dans la classe du block mais c’est toujours les mêmes crash-report.
                  Mais en regardant le crash-report, j’ai remarquer qu’il y a un soucis dans la ligne du “onBlockActivated” dans la classe BlockForgeMod.

                  Merci d’avoir pris le temps de m’aider,
                  Cordialement, Xemnys

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

                    Tu as mis quoi dans ces deux fonctions ?
                    Ton tile entity est bien enregistré ? https://www.minecraftforgefrance.fr/topic/995/ajouter-une-entité-à-votre-bloc-tile-entity

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

                      Voici ce que j’ai mis dans les deux fonctions :

                      @Override
                      	public boolean hasTileEntity(int metadata) {
                      		return true;
                      	}
                      
                      	@Override
                      	public TileEntity createTileEntity(World world, int metadata) 
                      	{
                      		if(metadata == 0) 
                      		{
                      			return new TileEntityForge();
                      		}
                      		else if(metadata == 1)
                      		{
                      			return new TileEntityForge();
                      		}
                      		else if(metadata == 2)
                      		{
                      			return new TileEntityForge();
                      		}
                      		return null;
                      	}
                      

                      Et oui j’ai bien enregistrer le TileEntity.

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

                        J’ai fait des modifications dans la ligne “onBlockActivated” voici le code :

                        public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, float par8, float par9)
                        	{
                        		if (world.isRemote)
                        		{
                        			return true;
                        		}
                        		else
                        		{
                        			TileEntityForge tileentityforge = (TileEntityForge)world.getTileEntity(x, y, z);
                        			
                        			if (tileentityforge != null)
                        			{
                        				player.openGui(IrisiumMod.instance, 0, world, x, y, z);
                        			}
                        			
                        			return true;
                        		}
                        	}
                        

                        Mais cette fois, quand on fait un clique droit sur le block, rien ne se passe. Pas de crash juste le gui qui ne veut pas s’ouvrir.

                        Cordialement, Xemnys.

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

                          Bonsoir,

                          Petite mise à jour au niveau du block, sur un court temps j’ai réussi à accéder au block mais après avoir cassé le block et l’avoir reposé. Je n’arrive plus à y accéder.

                          Cordialement, Xemnys.

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

                            Tu peux mettre directement comme ceci, sans check de metadata :

                                @Override
                                public TileEntity createTileEntity(World world, int metadata) 
                                {
                                    return new TileEntityForge();
                                }
                            

                            Il y a une erreur dans les logs où quelque chose ?

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

                              C’est bon tout marche bien, merci beaucoup de ton aide

                              Cordialement, Xemnys

                              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