16 avr. 2020, 17:38

Bon, après de lonnnngues recherches voici le code de l’unclaim finder en 1.12.2 avec 1h30 de durabilité :
Classe de l’item :

public class ItemRadar extends Item implements IHasModel
{
   private static EntityPlayer player;
   
   public static int durabilité = 90*20*60;
   
   public ItemRadar(String name)
    {
        setUnlocalizedName(name);
        setRegistryName(name);
        setCreativeTab(CreativeTabs.COMBAT);
        setMaxDamage(durabilité);
        setMaxStackSize(1);      
        ItemInit.ITEMS.add(this);
    }
    
    @Override
    public void registerModels()
    {
        Main.proxy.registerItemRederer(this, 0);
    }
    
    @Override
    public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected)
    {
        player = (EntityPlayer)entityIn;
        
        stack = player.getHeldItem(EnumHand.MAIN_HAND);
        
        if(player.getHeldItem(EnumHand.MAIN_HAND).getItem() instanceof ItemRadar)
        {
                if(durabilité >= 0)
                {
                    durabilité --;
                    stack.damageItem(1, player);
                }
                    
        }
        super.onUpdate(stack, worldIn, entityIn, itemSlot, isSelected);
    }
    
}

Classe du GUI :

public class RadarHandler extends Gui
{
    private static Minecraft mc;
        
    public static int amountTiles = 0;
                  
    ItemRenderer itemRenderer = Minecraft.getMinecraft().getItemRenderer();
    
    FontRenderer fontRender;
    
    final ResourceLocation bg = new ResourceLocation(Reference.MODID + ":textures/items/radar.png");

    public RadarHandler()
    {
        this.mc = Minecraft.getMinecraft();
        this.fontRender = this.mc.fontRenderer;
    }
    
    @SideOnly(Side.CLIENT)
    @SubscribeEvent
    public void onRenderPre(RenderGameOverlayEvent.Pre event)
    {
      
        if(event.getType() == RenderGameOverlayEvent.ElementType.HELMET && mc.player.getHeldItem(EnumHand.MAIN_HAND).getItem() == ItemInit.radar /*&& ItemRadar.isUsed == 1*/)
        {
             mc.getTextureManager().bindTexture(this.bg);
                
             drawModalRectWithCustomSizedTexture(5,5,0,0,32,32,32,32);        
                
             amountTiles = mc.world.getChunkFromChunkCoords(mc.player.chunkCoordX + 0,
                        mc.player.chunkCoordZ + 0).getTileEntityMap().values().size();
                
             amountTiles = amountTiles + mc.world.getChunkFromChunkCoords(mc.player.chunkCoordX + 0,
                        mc.player.chunkCoordZ + 1).getTileEntityMap().values().size();
                
             amountTiles = amountTiles + mc.world.getChunkFromChunkCoords(mc.player.chunkCoordX + 0,
                        mc.player.chunkCoordZ - 1).getTileEntityMap().values().size();
                
             amountTiles = amountTiles + mc.world.getChunkFromChunkCoords(mc.player.chunkCoordX + 1,
                        mc.player.chunkCoordZ).getTileEntityMap().values().size();
                
             amountTiles = amountTiles + mc.world.getChunkFromChunkCoords(mc.player.chunkCoordX - 1,
                        mc.player.chunkCoordZ).getTileEntityMap().values().size();   

             drawCenteredString(this.mc.fontRenderer, this.amountTiles + "%", 23, 39, -1);
             drawCenteredString(this.mc.fontRenderer, this.formatDuration(), 23, 48, -1);

             
             event.setCanceled(true);
        }
    }
    
    public static String formatDuration()
    {
        ItemStack stack = mc.player.getHeldItem(EnumHand.MAIN_HAND);
        
        int maxD = stack.getMaxDamage();
        int itemD = stack.getItemDamage();                
        
        int damage = maxD - itemD;
        
        Duration duration = Duration.ofSeconds(damage / 20);
        long seconds = duration.getSeconds();
        long absSeconds = Math.abs(seconds);
        String positive = String.format(
            "%d:%02d:%02d",
            absSeconds / 3600,
            (absSeconds % 3600) / 60,
            absSeconds % 60);
        return seconds < 0 ? "-" + positive : positive;
    }
     
}

Client proxy :

public class ClientProxy extends CommonProxy
{
    @Override
    public void registerItemRederer(Item item, int meta)
    {
        ModelLoader.setCustomModelResourceLocation(item, meta, new ModelResourceLocation(item.getRegistryName(), "inventory"));
        MinecraftForge.EVENT_BUS.register(new RadarHandler());
    }
}

Bonne journée et merci à @DailyCraft et @robin4002 pour leur aide !