1.12.2 Le gui ne s'ouvre pas



  • bonsoir, j'ai essayer de faire un bloc de type four en regardant un tutoriel, sauf qu'il ne fonctionne pas. Le bloc est bien là, comme je veux, je fais clic droit, mais le gui ne s'ouvre pas. J'ai des erreurs dans la console mais je ne vois pas d'où ça viens... J'ai peut être loupé quelque chose ?

    J'ai cette erreur là :

    [21:09:25] [Server thread/FATAL] [minecraft/MinecraftServer]: Error executing task
    java.util.concurrent.ExecutionException: java.lang.NullPointerException
    	at java.util.concurrent.FutureTask.report(Unknown Source) ~[?:1.8.0_241]
    	at java.util.concurrent.FutureTask.get(Unknown Source) ~[?:1.8.0_241]
    	at net.minecraft.util.Util.runTask(Util.java:54) [Util.class:?]
    	at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:798) [MinecraftServer.class:?]
    	at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:743) [MinecraftServer.class:?]
    	at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:192) [IntegratedServer.class:?]
    	at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:592) [MinecraftServer.class:?]
    	at java.lang.Thread.run(Unknown Source) [?:1.8.0_241]
    Caused by: java.lang.NullPointerException
    	at com.galaxia.mod.machinery.ContainerSinteringFurnace.<init>(ContainerSinteringFurnace.java:23) ~[ContainerSinteringFurnace.class:?]
    	at com.galaxia.mod.machinery.GuiHandler.getServerGuiElement(GuiHandler.java:15) ~[GuiHandler.class:?]
    	at net.minecraftforge.fml.common.network.NetworkRegistry.getRemoteGuiContainer(NetworkRegistry.java:253) ~[NetworkRegistry.class:?]
    	at net.minecraftforge.fml.common.network.internal.FMLNetworkHandler.openGui(FMLNetworkHandler.java:88) ~[FMLNetworkHandler.class:?]
    	at net.minecraft.entity.player.EntityPlayer.openGui(EntityPlayer.java:2809) ~[EntityPlayer.class:?]
    	at com.galaxia.mod.machinery.BlockSinteringFurnace.onBlockActivated(BlockSinteringFurnace.java:64) ~[BlockSinteringFurnace.class:?]
    	at net.minecraft.server.management.PlayerInteractionManager.processRightClickBlock(PlayerInteractionManager.java:475) ~[PlayerInteractionManager.class:?]
    	at net.minecraft.network.NetHandlerPlayServer.processTryUseItemOnBlock(NetHandlerPlayServer.java:769) ~[NetHandlerPlayServer.class:?]
    	at net.minecraft.network.play.client.CPacketPlayerTryUseItemOnBlock.processPacket(CPacketPlayerTryUseItemOnBlock.java:68) ~[CPacketPlayerTryUseItemOnBlock.class:?]
    	at net.minecraft.network.play.client.CPacketPlayerTryUseItemOnBlock.processPacket(CPacketPlayerTryUseItemOnBlock.java:13) ~[CPacketPlayerTryUseItemOnBlock.class:?]
    	at net.minecraft.network.PacketThreadUtil$1.run(PacketThreadUtil.java:21) ~[PacketThreadUtil$1.class:?]
    	at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[?:1.8.0_241]
    	at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:1.8.0_241]
    	at net.minecraft.util.Util.runTask(Util.java:53) ~[Util.class:?]
    

    Les class dont t'il est question :

    package com.galaxia.mod.machinery;
    
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.entity.player.InventoryPlayer;
    import net.minecraft.inventory.Container;
    import net.minecraft.inventory.IContainerListener;
    import net.minecraft.inventory.Slot;
    import net.minecraft.item.ItemStack;
    import net.minecraftforge.fml.relauncher.Side;
    import net.minecraftforge.fml.relauncher.SideOnly;
    import net.minecraftforge.items.CapabilityItemHandler;
    import net.minecraftforge.items.IItemHandler;
    import net.minecraftforge.items.SlotItemHandler;
    
    public class ContainerSinteringFurnace extends Container
    {
    	private final TileEntitySinteringFurnace tileentity;
    	private int cookTime, totalCookTime, burnTime, currentBurnTime;
    	
    	public ContainerSinteringFurnace(InventoryPlayer player, TileEntitySinteringFurnace tileentity) 
    	{
    		this.tileentity = tileentity;
    		IItemHandler handler = tileentity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null);
    		
    		this.addSlotToContainer(new SlotItemHandler(handler, 0, 26, 11));
    		this.addSlotToContainer(new SlotItemHandler(handler, 1, 26, 59));
    		this.addSlotToContainer(new SlotItemHandler(handler, 2, 7, 35));
    		this.addSlotToContainer(new SlotItemHandler(handler, 3, 81, 36));
    		
    		for(int y = 0; y < 3; y++)
    		{
    			for(int x = 0; x < 9; x++)
    			{
    				this.addSlotToContainer(new Slot(player, x + y*9 + 9, 8 + x*18, 84 + y*18));
    			}
    		}
    		
    		for(int x = 0; x < 9; x++)
    		{
    			this.addSlotToContainer(new Slot(player, x, 8 + x * 18, 142));
    		}
    	}
    	
    	@Override
    	public void detectAndSendChanges() 
    	{
    		super.detectAndSendChanges();
    		
    		for(int i = 0; i < this.listeners.size(); ++i) 
    		{
    			IContainerListener listener = (IContainerListener)this.listeners.get(i);
    			
    			if(this.cookTime != this.tileentity.getField(2)) listener.sendWindowProperty(this, 2, this.tileentity.getField(2));
    			if(this.burnTime != this.tileentity.getField(0)) listener.sendWindowProperty(this, 0, this.tileentity.getField(0));
    			if(this.currentBurnTime != this.tileentity.getField(1)) listener.sendWindowProperty(this, 1, this.tileentity.getField(1));
    			if(this.totalCookTime != this.tileentity.getField(3)) listener.sendWindowProperty(this, 3, this.tileentity.getField(3));
    		}
    		
    		this.cookTime = this.tileentity.getField(2);
    		this.burnTime = this.tileentity.getField(0);
    		this.currentBurnTime = this.tileentity.getField(1);
    		this.totalCookTime = this.tileentity.getField(3);
    	}
    	
    	@Override
    	@SideOnly(Side.CLIENT)
    	public void updateProgressBar(int id, int data) 
    	{
    		this.tileentity.setField(id, data);
    	}
    	
    	@Override
    	public boolean canInteractWith(EntityPlayer playerIn) 
    	{
    		return this.tileentity.isUsableByPlayer(playerIn);
    	}
    	
    	@Override
    	public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) 
    	{
    		ItemStack stack = ItemStack.EMPTY;
    		Slot slot = (Slot)this.inventorySlots.get(index);
    		
    		if(slot != null && slot.getHasStack()) 
    		{
    			ItemStack stack1 = slot.getStack();
    			stack = stack1.copy();
    			
    			if(index == 3) 
    			{
    				if(!this.mergeItemStack(stack1, 4, 40, true)) return ItemStack.EMPTY;
    				slot.onSlotChange(stack1, stack);
    			}
    			else if(index != 2 && index != 1 && index != 0) 
    			{		
    				Slot slot1 = (Slot)this.inventorySlots.get(index + 1);
    				
    				if(!SinteringFurnaceRecipes.getInstance().getSinteringResult(stack1, slot1.getStack()).isEmpty())
    				{
    					if(!this.mergeItemStack(stack1, 0, 2, false)) 
    					{
    						return ItemStack.EMPTY;
    					}
    					else if(TileEntitySinteringFurnace.isItemFuel(stack1))
    					{
    						if(!this.mergeItemStack(stack1, 2, 3, false)) return ItemStack.EMPTY;
    					}
    					else if(TileEntitySinteringFurnace.isItemFuel(stack1))
    					{
    						if(!this.mergeItemStack(stack1, 2, 3, false)) return ItemStack.EMPTY;
    					}
    					else if(TileEntitySinteringFurnace.isItemFuel(stack1))
    					{
    						if(!this.mergeItemStack(stack1, 2, 3, false)) return ItemStack.EMPTY;
    					}
    					else if(index >= 4 && index < 31)
    					{
    						if(!this.mergeItemStack(stack1, 31, 40, false)) return ItemStack.EMPTY;
    					}
    					else if(index >= 31 && index < 40 && !this.mergeItemStack(stack1, 4, 31, false))
    					{
    						return ItemStack.EMPTY;
    					}
    				}
    			} 
    			else if(!this.mergeItemStack(stack1, 4, 40, false)) 
    			{
    				return ItemStack.EMPTY;
    			}
    			if(stack1.isEmpty())
    			{
    				slot.putStack(ItemStack.EMPTY);
    			}
    			else
    			{
    				slot.onSlotChanged();
    
    			}
    			if(stack1.getCount() == stack.getCount()) return ItemStack.EMPTY;
    			slot.onTake(playerIn, stack1);
    		}
    		return stack;
    	}
    }
    
    
    
    package com.galaxia.mod.machinery;
    
    import com.galaxia.mod.References;
    
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.util.math.BlockPos;
    import net.minecraft.world.World;
    import net.minecraftforge.fml.common.network.IGuiHandler;
    
    public class GuiHandler implements IGuiHandler
    {
    	@Override
    	public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) 
    	{
    		if(ID == References.GUI_SINTERING_FURNACE) return new ContainerSinteringFurnace(player.inventory, (TileEntitySinteringFurnace)world.getTileEntity(new BlockPos(x,y,z)));
    		return null;
    	}
    	
    	@Override
    	public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) 
    	{
    		if(ID == References.GUI_SINTERING_FURNACE) return new GuiSinteringFurnace(player.inventory, (TileEntitySinteringFurnace)world.getTileEntity(new BlockPos(x,y,z)));
    
    		return null;
    	}
    }
    
    
    package com.galaxia.mod.machinery;
    
    import java.util.Random;
    
    import com.galaxia.mod.Galaxia;
    import com.galaxia.mod.References;
    import com.galaxia.mod.init.BlocksMod;
    
    import net.minecraft.block.Block;
    import net.minecraft.block.BlockHorizontal;
    import net.minecraft.block.ITileEntityProvider;
    import net.minecraft.block.SoundType;
    import net.minecraft.block.material.Material;
    import net.minecraft.block.properties.IProperty;
    import net.minecraft.block.properties.PropertyBool;
    import net.minecraft.block.properties.PropertyDirection;
    import net.minecraft.block.state.BlockStateContainer;
    import net.minecraft.block.state.IBlockState;
    import net.minecraft.entity.EntityLivingBase;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.tileentity.TileEntity;
    import net.minecraft.util.EnumBlockRenderType;
    import net.minecraft.util.EnumFacing;
    import net.minecraft.util.EnumHand;
    import net.minecraft.util.Mirror;
    import net.minecraft.util.Rotation;
    import net.minecraft.util.math.BlockPos;
    import net.minecraft.world.World;
    
    public class BlockSinteringFurnace extends Block {
    
    	public static final PropertyDirection FACING = BlockHorizontal.FACING;
    	public static final PropertyBool BURNING = PropertyBool.create("burning");
    	
    	public BlockSinteringFurnace(String name) {
    		
    		super(Material.IRON);
    		setSoundType(SoundType.METAL);
    		setUnlocalizedName(name);
    		setRegistryName(name);
    		setResistance(2.0F);
    	    setHardness(0.5F);
    	    setCreativeTab(Galaxia.galaxiatab);
    	    this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH).withProperty(BURNING, false));
    	}
    	
    	public Item getItemDropped(IBlockState state, Random rand, int fortune)
    	{
    		return Item.getItemFromBlock(BlocksMod.sintering_furnace);
    	}
    	
    	public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state)
    	{
    		return new ItemStack(BlocksMod.sintering_furnace);
    	}
    	
    	@Override
    	public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn,
    			EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
    		if(!worldIn.isRemote)
    		{
    			playerIn.openGui(Galaxia.instance, References.GUI_SINTERING_FURNACE, worldIn, pos.getX(), pos.getY(), pos.getZ());
    		}
    		return true;
    	}
    	
    	public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) 
    	{
    		if (!worldIn.isRemote) 
            {
                IBlockState north = worldIn.getBlockState(pos.north());
                IBlockState south = worldIn.getBlockState(pos.south());
                IBlockState west = worldIn.getBlockState(pos.west());
                IBlockState east = worldIn.getBlockState(pos.east());
                EnumFacing face = (EnumFacing)state.getValue(FACING);
    
                if (face == EnumFacing.NORTH && north.isFullBlock() && !south.isFullBlock()) face = EnumFacing.SOUTH;
                else if (face == EnumFacing.SOUTH && south.isFullBlock() && !north.isFullBlock()) face = EnumFacing.NORTH;
                else if (face == EnumFacing.WEST && west.isFullBlock() && !east.isFullBlock()) face = EnumFacing.EAST;
                else if (face == EnumFacing.EAST && east.isFullBlock() && !west.isFullBlock()) face = EnumFacing.WEST;
                worldIn.setBlockState(pos, state.withProperty(FACING, face), 2);
            }
    	}
    	
    	public static void setState(boolean active, World worldIn, BlockPos pos) 
    	{
    		IBlockState state = worldIn.getBlockState(pos);
    		TileEntity tileentity = worldIn.getTileEntity(pos);
    		
    		//if(active) worldIn.setBlockState(pos, BlockInit.SINTERING_FURNACE.getDefaultState().withProperty(FACING, state.getValue(FACING)).withProperty(BURNING, true), 3);
    		//else worldIn.setBlockState(pos, BlockInit.SINTERING_FURNACE.getDefaultState().withProperty(FACING, state.getValue(FACING)).withProperty(BURNING, false), 3);
    		
    		if(tileentity != null) 
    		{
    			tileentity.validate();
    			worldIn.setTileEntity(pos, tileentity);
    		}
    	}
    	
    	@Override
    	public boolean hasTileEntity(IBlockState state) 
    	{
    		return true;
    	}
    	
    	
    	@Override
    	public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) 
    	{
    		return this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing().getOpposite());
    	}
    	
    	@Override
    	public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) 
    	{
    		worldIn.setBlockState(pos, this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing().getOpposite()), 2);
    	}
    	
    	@Override
    	public EnumBlockRenderType getRenderType(IBlockState state) 
    	{
    		return EnumBlockRenderType.MODEL;
    	}
    	
    	@Override
    	public IBlockState withRotation(IBlockState state, Rotation rot)
    	{
    		return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING)));
    	}
    	
    	@Override
    	public IBlockState withMirror(IBlockState state, Mirror mirrorIn) 
    	{
    		return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING)));
    	}
    	
    	@Override
    	protected BlockStateContainer createBlockState() 
    	{
    		return new BlockStateContainer(this, new IProperty[] {BURNING,FACING});
    	}
    	
    	@Override
    	public IBlockState getStateFromMeta(int meta) 
    	{
    		EnumFacing facing = EnumFacing.getFront(meta);
    		if(facing.getAxis() == EnumFacing.Axis.Y) facing = EnumFacing.NORTH;
    		return this.getDefaultState().withProperty(FACING, facing);
    	}
    	
    	@Override
    	public int getMetaFromState(IBlockState state) 
    	{
    		return ((EnumFacing)state.getValue(FACING)).getIndex();
    	}
    
    	public TileEntity createNewTileEntity(World world, IBlockState state) {
    		
    		return new TileEntitySinteringFurnace();
    	}
    
    }
    
    

    Si ont peut m'aider pour ça..
    merci.



  • Bonsoir,

    visiblement l'erreur vient de cette ligne :

    IItemHandler handler = tileentity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null);
    

    de ta class ContainerSinteringFurnace. L'erreur est un java.lang.NullPointerException, je suppose du coup que ta tileentity vaut null 🤨 Es-tu sûr qu'il y a une TileEntity aux positions de ton bloc ?


  • Moddeurs confirmés Rédacteurs Administrateurs

    Dans la classe de ton bloc, ajoutes un @Override au-dessus de la méthode createNewTileEntity. Cela passe ou cela fait une erreur de compilation ?



  • -Oui..
    -Si je rajoute @Override, ça me met une erreur en me disant de supprimer ce @Override (mais le jeu se lance quand même, même si ça ne change rien)



  • Bon j'ai modifié une ligne du gui je l'ai passé de 0 a 1 et ça marche..
    Bon merci qunad même ^^!


  • Moddeurs confirmés Rédacteurs Administrateurs

    Si tu as une erreur sur createNewTileEntity en ajoutant @Override cela veut dire que tu n'as pas le bon nom de fonction, donc ton tile entity n'est pas créé et vaut null. D'où le NPE.

    Cherches dans la classe Block de minecraft le bon nom de fonction.


Log in to reply