Всем привет.Сделал капу,зарегал ,сделал пакет но капа не сохраняется после перезахода.
Помогите решить
Помогите решить
Java:
public class DefaultExpHandler implements IExpHandler {
private int expfish;
private int levelfish;
@Override
public int getExpFishing() {
return this.expfish;
}
@Override
public void setExpFishing(int expfish) {
this.expfish = expfish;
}
@Override
public void addExpFishing(int expfish) {
this.expfish += expfish;
}
@Override
public int getLevelFishing() {
return this.levelfish;
}
@Override
public void setLevelFishing(int levelfish) {
this.levelfish = levelfish;
}
@Override
public void addLevelFishing(int levelfish) {
this.levelfish += levelfish;
if (this.levelfish < 0)
{
this.levelfish = 0;
this.expfish = 0;
}
}
Java:
public class ExpDataHandler {
@CapabilityInject(IExpHandler.class)
public static final Capability<IExpHandler> CAPABILITY_EXP = null;
// Handles all of the required registration for the capability.
public static void register() {
CapabilityManager.INSTANCE.register(IExpHandler.class, new StorageExp(), DefaultExpHandler.class);
MinecraftForge.EVENT_BUS.register(new ExpDataHandler());
}
// Allows the provider to be attatched to a target entity.
@SubscribeEvent
public void attachCapabilities(AttachCapabilitiesEvent<Entity> event) {
if (event.getObject() instanceof EntityPlayer)
event.addCapability(new ResourceLocation("Elterion", "Skills"), new Provider());
}
// Allows for the capability to persist after death.
@SubscribeEvent
public void clonePlayer(PlayerEvent.Clone event) {
final IExpHandler original = getHandler(event.getOriginal());
final IExpHandler clone = getHandler(event.getEntity());
clone.setExpFishing(original.getExpFishing());
clone.setLevelFishing(original.getLevelFishing());
}
// Simple wrapper to get the handler from an entity.
public static IExpHandler getHandler(Entity entity) {
if (entity.hasCapability(CAPABILITY_EXP, EnumFacing.DOWN))
return entity.getCapability(CAPABILITY_EXP, EnumFacing.DOWN);
return null;
}
}
Java:
public class ExpSkillsMessage implements IMessage{
private int expfish,levelfish;
public ExpSkillsMessage() {}
public ExpSkillsMessage(int expfish, int levelfish) {
this.expfish = expfish;
this.levelfish = levelfish;
}
@Override
public void fromBytes(ByteBuf buf) {
this.expfish = buf.readInt();
this.levelfish = buf.readInt();
}
@Override
public void toBytes(ByteBuf buf) {
buf.writeInt(this.expfish);
buf.writeInt(this.levelfish);
}
public static class Handler implements IMessageHandler<ExpSkillsMessage, IMessage> {
@Override
public IMessage onMessage(ExpSkillsMessage message, MessageContext ctx) {
Minecraft mc = Minecraft.getMinecraft();
EntityPlayer player = mc.getMinecraft().player;
IExpHandler capa = player.getCapability(Provider.CAPABILITY_EXP, null);
capa.setExpFishing(message.expfish);
capa.setLevelFishing(message.levelfish);
return null;
}
}
}
Java:
public interface IExpHandler {
int getExpFishing();
void setExpFishing(int expfish);
void addExpFishing(int expfish);
int getLevelFishing();
void setLevelFishing(int levelfish);
void addLevelFishing(int levelfish);
}
Java:
public class Provider implements ICapabilitySerializable<NBTTagCompound> {
@CapabilityInject(IExpHandler.class)
public static final Capability<IExpHandler> CAPABILITY_EXP = null;
IExpHandler instance = CAPABILITY_EXP.getDefaultInstance();
@Override
public boolean hasCapability(Capability<?> capability, EnumFacing facing) {
return capability == CAPABILITY_EXP;
}
@Override
public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
return hasCapability(capability, facing) ? CAPABILITY_EXP.<T>cast(instance) : null;
}
@Override
public NBTTagCompound serializeNBT() {
return (NBTTagCompound) CAPABILITY_EXP.getStorage().writeNBT(CAPABILITY_EXP, instance, null);
}
@Override
public void deserializeNBT(NBTTagCompound nbt) {
CAPABILITY_EXP.getStorage().readNBT(CAPABILITY_EXP, instance, null, nbt);
}
}
Java:
public class StorageExp implements Capability.IStorage<IExpHandler> {
@Override
public NBTBase writeNBT (Capability<IExpHandler> capability, IExpHandler instance, EnumFacing side) {
final NBTTagCompound tag = new NBTTagCompound();
tag.setInteger("expfish ", instance.getExpFishing());
tag.setInteger("levelfish ", instance.getLevelFishing());
return tag;
}
@Override
public void readNBT (Capability<IExpHandler> capability, IExpHandler instance, EnumFacing side, NBTBase nbt) {
final NBTTagCompound tag = (NBTTagCompound) nbt;
instance.setExpFishing(tag.getInteger("expfish"));
instance.setLevelFishing(tag.getInteger("levelfish"));
}
}
Java:
@Mod.EventBusSubscriber
public class fishexp extends SimplePacket{
@SubscribeEvent
public static void onfishg(ItemFishedEvent event)
{
if( event.getEntity() instanceof EntityPlayerMP) {
IExpHandler capa = event.getEntity().getCapability(Provider.CAPABILITY_EXP, null);
capa.addExpFishing(1);
NetworkHandler.network.sendTo(new ExpSkillsMessage(capa.getExpFishing(), capa.getLevelFishing()), (EntityPlayerMP) event.getEntity());
event.getEntityPlayer().sendMessage(new TextComponentString(String.valueOf(capa.getExpFishing())));
}
}
}
Последнее редактирование: