OK, le système en lui même fonctionne bien. J’ai fait ceci, mais il reste quelque problème :
package com.survivant.mod;
import com.survivant.mod.Capabilities.IThirst;
import com.survivant.mod.Capabilities.ThirstProvider;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.DamageSource;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.event.GuiScreenEvent;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType;
import net.minecraftforge.event.AttachCapabilitiesEvent;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraftforge.event.entity.player.PlayerSleepInBedEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent;
import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerRespawnEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;
public class SurvivantThirstBar
{
public static int i = 0;
@SubscribeEvent
public void onPlayerLogsIn(PlayerLoggedInEvent event)
{
EntityPlayer player = event.player;
IThirst thirst = player.getCapability(ThirstProvider.THIRST_CAP, null);
}
@SubscribeEvent
public void onPlayerSleep(PlayerSleepInBedEvent event)
{
EntityPlayer player = event.entityPlayer;
if (player.worldObj.isRemote)
{
return;
}
IThirst thirst = player.getCapability(ThirstProvider.THIRST_CAP, null);
}
@SubscribeEvent
public void onPlayerClone(PlayerEvent.Clone event)
{
EntityPlayer player = event.entityPlayer;
IThirst thirst = player.getCapability(ThirstProvider.THIRST_CAP, null);
thirst.set(86);
}
@SubscribeEvent
public void playerTick(TickEvent.PlayerTickEvent event)
{
EntityPlayer player = event.player;
IThirst thirst = player.getCapability(ThirstProvider.THIRST_CAP, null);
if (!event.player.capabilities.isCreativeMode)
{
i++;
if (i == 800)
{
thirst.consume(1);
System.out.println("thirst = " + thirst.getThirst());
i = 0;
}
if (thirst.getThirst() == 0)
{
event.player.attackEntityFrom(ModSurvivant.damageSourceDehydration, 1.0F);
}
}
}
@SubscribeEvent
public void onRenderGameOverlay(RenderGameOverlayEvent event)
{
if (!event.isCancelable() && event.type == ElementType.EXPERIENCE)
{
Minecraft mc = Minecraft.getMinecraft();
if (!mc.thePlayer.capabilities.isCreativeMode)
{
EntityPlayer player = mc.thePlayer;
IThirst thirst = player.getCapability(ThirstProvider.THIRST_CAP, null);
int posX = event.resolution.getScaledWidth() / 2 + 7;
int posY = event.resolution.getScaledHeight() - 50;
mc.renderEngine.bindTexture(new ResourceLocation("survivant:textures/gui/thirstBar.png"));
mc.ingameGUI.drawTexturedModalRect(posX, posY, 0, 0, 88, 9);
mc.ingameGUI.drawTexturedModalRect(posX + 1, posY + 1, 0, 9, (int)thirst.getThirst(), 7);
}
}
}
}
Les problèmes sont les suivants :
- quand la variable thirst arrive à 0 (vérifié à l’aide d’un System.out.println("thirst = "+thirst.getThrist())), normalement je suis censé prendre des dégâts, or il ne se passe rien même si la ligne est présente.
- quand je me déco-reco ou que j’étais sur un monde puis que je ferme le jeu et que je reviens. La variable thrist reste bien la même quelle était avant la deconnection (vérifié grâce au System.out.println(…)), pourtant en jeu, le rendu graphique de la barre de soif est total : graphiquemment la barre est pleine alors que ce n’est pas le cas dans la console.
Merci par avance pour votre aide.