Hey hey,
Après avoir longuement arrêté le modding Mc pour m'orienter vers la programmation Spigot, j'ai décider de revenir car Spigot commencait à montrer ses limites, ainsi je me suis lancé dans un petit projet, mais j'ai été arrêté très tôt, car j'ai du mal avec le système de Capabilités.
En effet, mon mod est en 1.14.4 et il n'y a aucun tutoriel en cette version a part la documentation officielle qui n'est pas claire du tout, j'ai suivi des tonnes de tutoriels sur les autres versions mais j'arrivais toujours a quelque chose qui n'existait plus au final et qui avait changer entre temps, j'ai réussis à un peu avancer, mais j'ai finis par rebloquer et donc je viens sur ce forum pour trouver une solution à ce problème, ainsi qu'être sur que je m'y suis bien pris, sachant que c'est tout nouveau pour moi.
Le problème que je rencontre c'est au niveau de la récupération de la valeur d'une capabilité, je ne suis même pas sur de l'avoir bien créer, voici mon code :
Interface IPrestige :
Classe Prestige:
Classe ModCapabilities :
Et code pour récupérer :
J'ai également des questions en générales auxquelles je n'ai pas pu trouver de réponses claires sur Forge :
Les capabilités sont-t-elles le seul moyen de stocker des données dans les joueurs ? Ou du moins le moyen le plus opti ?
Est-ce qu'une fois les données stockées dans un joueurs grâce aux capabilités, j'ai moyen de les récupérer depuis un autre joueur à l'aide de commandes, en clair j'ai besoin que les données stockées dans le joueur soit accessible au niveau serveur, est-ce possible ? Sinon comment le faire ? (par ex pour un système d'argent)
Ou trouver des bons tutoriels en 1.14.4 ? x_x C'est très mal documenté!
Merci d'avance
Après avoir longuement arrêté le modding Mc pour m'orienter vers la programmation Spigot, j'ai décider de revenir car Spigot commencait à montrer ses limites, ainsi je me suis lancé dans un petit projet, mais j'ai été arrêté très tôt, car j'ai du mal avec le système de Capabilités.
En effet, mon mod est en 1.14.4 et il n'y a aucun tutoriel en cette version a part la documentation officielle qui n'est pas claire du tout, j'ai suivi des tonnes de tutoriels sur les autres versions mais j'arrivais toujours a quelque chose qui n'existait plus au final et qui avait changer entre temps, j'ai réussis à un peu avancer, mais j'ai finis par rebloquer et donc je viens sur ce forum pour trouver une solution à ce problème, ainsi qu'être sur que je m'y suis bien pris, sachant que c'est tout nouveau pour moi.
Le problème que je rencontre c'est au niveau de la récupération de la valeur d'une capabilité, je ne suis même pas sur de l'avoir bien créer, voici mon code :
Interface IPrestige :
Java:
package com.rewelias.fantasia.capabilities;
public interface IPrestige {
public void setPrestige(Integer nb);
public Integer getPrestige();
}
Classe Prestige:
Java:
package com.rewelias.fantasia.capabilities;
import net.minecraft.nbt.IntNBT;
import net.minecraftforge.common.util.INBTSerializable;
public class Prestige implements IPrestige, INBTSerializable<IntNBT> {
public Integer prestige;
public Prestige() {
prestige = 0;
}
@Override
public void setPrestige(Integer nb) {
this.prestige = nb;
}
@Override
public Integer getPrestige() {
return this.prestige;
}
@Override
public IntNBT serializeNBT() {
IntNBT nbt = new IntNBT(getPrestige());
return nbt;
}
@Override
public void deserializeNBT(IntNBT nbt) {
this.prestige = nbt.getInt();
}
}
Classe ModCapabilities :
Java:
package com.rewelias.fantasia.capabilities;
import net.minecraft.nbt.INBT;
import net.minecraft.util.Direction;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.Capability.IStorage;
import net.minecraftforge.common.capabilities.CapabilityInject;
import net.minecraftforge.common.capabilities.CapabilityManager;
public class ModCapabilities {
@CapabilityInject(IPrestige.class)
public static final Capability<IPrestige> PRESTIGE = null;
public static void registerCapabilities() {
CapabilityManager.INSTANCE.register(IPrestige.class, new CapabilityPrestige(), Prestige::new);
}
public static class CapabilityPrestige implements IStorage<IPrestige> {
@Override
public INBT writeNBT(Capability<IPrestige> capability, IPrestige instance, Direction side) {
// TODO Auto-generated method stub
return null;
}
@Override
public void readNBT(Capability<IPrestige> capability, IPrestige instance, Direction side, INBT nbt) {
// TODO Auto-generated method stub
}
}
}
Et code pour récupérer :
Java:
@SubscribeEvent
public static void onPlayerJoin(PlayerLoggedInEvent event){
PlayerEntity player = event.getPlayer();
LazyOptional<IPrestige> prestige = player.getCapability(ModCapabilities.PRESTIGE, null);
player.sendMessage(new StringTextComponent("Ton prestige : " + prestige.toString()));
}
J'ai également des questions en générales auxquelles je n'ai pas pu trouver de réponses claires sur Forge :
Les capabilités sont-t-elles le seul moyen de stocker des données dans les joueurs ? Ou du moins le moyen le plus opti ?
Est-ce qu'une fois les données stockées dans un joueurs grâce aux capabilités, j'ai moyen de les récupérer depuis un autre joueur à l'aide de commandes, en clair j'ai besoin que les données stockées dans le joueur soit accessible au niveau serveur, est-ce possible ? Sinon comment le faire ? (par ex pour un système d'argent)
Ou trouver des bons tutoriels en 1.14.4 ? x_x C'est très mal documenté!
Merci d'avance