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);
}
}
:::