15 juin 2014, 13:57

Classe : ExtendedEntityPropMoney
Package : fr.paramystick.tutoriel.extprop
:::


package fr.paramystick.tutoriel.extprop;

import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import fr.paramystick.tutoriel.core.CommonProxy;
import fr.paramystick.tutoriel.core.TutorielMod;
import fr.paramystick.tutoriel.packets.PacketMoney;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
import net.minecraftforge.common.IExtendedEntityProperties;
import net.minecraftforge.event.entity.EntityEvent.EntityConstructing;
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
import net.minecraftforge.event.entity.living.LivingDeathEvent;

public class ExtendedEntityPropMoney implements IExtendedEntityProperties
{
//Identifiant à la propriété
public final static String EXT_PROP_NAME = "ExtPropMoney";
private final EntityPlayer player;
public long Money, maxMoney;
//–---------------------------------------------------------------------------------------

//Le constructeur. Il prend en paramètre le player auquel nous allons toucher.
public ExtendedEntityPropMoney(EntityPlayer player)
{
this.player = player;
this.Money = 12;
this.maxMoney = 20;
}
//-----------------------------------------------------------------------------------------

//méthodes concernant la sauvegarde et l'obtention de ces données
public static final void register(EntityPlayer player)
{
player.registerExtendedProperties(ExtendedEntityPropMoney.EXT_PROP_NAME, new ExtendedEntityPropMoney(player));
}

public static final ExtendedEntityPropMoney get(EntityPlayer player)
{
return (ExtendedEntityPropMoney) player.getExtendedProperties(EXT_PROP_NAME);
}
//-----------------------------------------------------------------------------------------

// Synchronisation client/serveur
public final void sync() {
PacketMoney packetMoney = new PacketMoney(this.maxMoney, this.Money);
//La ligne suivante dépend de votre manière d'envoyer les packets. Celle-ci vient de mon mod, je ne la changerais pas car je ne peux l'appliquer à votre mod, mais elle reste bonne pour un exemple.
TutorielMod.TutorielModPacketHandler.sendToServer(packetMoney);

if (!player.worldObj.isRemote) {
EntityPlayerMP player1 = (EntityPlayerMP) player;
//Ici, même chose que précédemment, sauf que le packet est envoyé au player.
TutorielMod.TutorielModPacketHandler.sendTo(packetMoney, player1);
}
}
//-----------------------------------------------------------------------------------------

//Encore une méthode de sauvegarde
private static String getSaveKey(EntityPlayer player)
{
return player.getDisplayName() + ":" + EXT_PROP_NAME;
}
//-----------------------------------------------------------------------------------------

public static void saveProxyData(EntityPlayer player) {
ExtendedEntityPropMoney playerData = ExtendedEntityPropMoney.get(player);
NBTTagCompound savedData = new NBTTagCompound();

playerData.saveNBTData(savedData);
CommonProxy.storeEntityData(getSaveKey(player), savedData);
}

public static void loadProxyData(EntityPlayer player) {
ExtendedEntityPropMoney playerData = ExtendedEntityPropMoney.get(player);
NBTTagCompound savedData = CommonProxy.getEntityData(getSaveKey(player));

if (savedData != null)
{
playerData.loadNBTData(savedData);
}

playerData.sync();
}
//-----------------------------------------------------------------------------------------

@Override
public void saveNBTData(NBTTagCompound compound)
{
// TODO Auto-generated method stub
NBTTagCompound properties = new NBTTagCompound();

properties.setLong("Money", this.Money);
properties.setLong("maxMoney", this.maxMoney);

compound.setTag(EXT_PROP_NAME, properties);
}

@Override
public void loadNBTData(NBTTagCompound compound)
{
// TODO Auto-generated method stub
NBTTagCompound properties = (NBTTagCompound) compound.getTag(EXT_PROP_NAME);
this.Money = properties.getLong("Money");
this.maxMoney = properties.getLong("maxMoney");

}

@Override
public void init(Entity entity, World world)
{
// TODO Auto-generated method stub

}
//-----------------------------------------------------------------------------------------

// Pour des commandes
public boolean pay(int amount)
{
boolean sufficient = amount <= this.Money;

if (sufficient)
{
this.Money -= amount;
this.sync();
} else {
return false;
}

return sufficient;
}

public void addMoney(int amount)
{
this.Money += amount;
this.sync();
}

public long getMoney()
{
return this.Money;
}

public void setMoney(int newMoney)
{
this.Money = newMoney;
this.sync();
}

//-----------------------------------------------------------------------------------------
}

:::

Classe : InfoOverlay
Package : fr.paramystick.tutoriel.hud
:::


package fr.paramystick.tutoriel.hud;

import cpw.mods.fml.client.FMLClientHandler;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MathHelper;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import fr.paramystick.tutoriel.extprop.ExtendedEntityPropMoney;

//------------------------------------------------------------------------------------------

public class InfoOverlay
{
private Minecraft mc = FMLClientHandler.instance().getClient();
private final EntityPlayer player = mc.thePlayer;
private String fpsString;
private long MoneyLong,maxMoneyLong;

@SubscribeEvent
public void renderGameOverlay(RenderGameOverlayEvent.Post event)
{
if(event.type != ElementType.EXPERIENCE)
{
return;
}
fpsString = mc.debug.split(",", 2)[0];
//MoneyLong = 5;
//maxMoneyLong = 10;
MoneyLong = ExtendedEntityPropMoney.get(player).Money;
maxMoneyLong = ExtendedEntityPropMoney.get(player).maxMoney;

FMLClientHandler.instance().getClient().fontRenderer.drawStringWithShadow("Fps : "+fpsString, 5, 5, 0xffffff);
FMLClientHandler.instance().getClient().fontRenderer.drawStringWithShadow("Money : "+MoneyLong+" / "+maxMoneyLong, 5, 25, 0xffffff);
}
}

:::