Сохранение переменной для игрока

Версия Minecraft
1.19.3
API
Fabric
33
1
У меня есть парочку переменных, я хочю их сохранить для игрока, то есть если он выйдет из игры, они сохраняться для этого мира.
Вообще я хочю зделать прокачку характеристик игрока, пока не знаю как это должным образом реализовать, если сможете помочь буду благодарен. Но я так понимаю мне нужно где то хранить переменные. В файле? В коде?
 
33
1
Я разобрался но теперь другая проблема тот код который я написал выдаёт ошибку именно с миксинами.
MixinEntityPlayer:
package net.baraban4ik.leveling.mixin;

import net.baraban4ik.leveling.mixin.interfaces.StatsContainer;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.nbt.NbtCompound;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import java.util.ArrayList;
import java.util.List;

@Mixin(PlayerEntity.class)
public abstract class MixinEntityPlayer implements StatsContainer{
    private float LEVEL = 0;
    private float LEVEL_PROCENT = 0;


    @Override
    public float getStats(String var) {
        return switch (var) {
            case "LEVEl" -> LEVEL;
            case "LEVEL_PROCENT" -> LEVEL_PROCENT;
            default -> LEVEL;
        };
    }

    @Override
    public void setStats(String var, float value) {
        switch (var) {
            case "LEVEl" -> LEVEL = value;
            case "LEVEL_PROCENT" -> LEVEL_PROCENT = value;
        }
    }

    @Inject(method = "writeCustomDataToNbt", at = @At("HEAD"))
    public void injectWriteCustomDataToNbt(NbtCompound nbt, CallbackInfo ci) {
        nbt.putFloat("leveling.stats.level", LEVEL);
        nbt.putFloat("leveling.stats.level_procent", LEVEL_PROCENT);
    }
    @Inject(method = "readCustomDataFromNbt", at = @At("HEAD"))
    public void injectReadCustomDataFromNbt(NbtCompound nbt, CallbackInfo ci) {
        LEVEL = nbt.getInt("leveling.stats.level");
        LEVEL_PROCENT = nbt.getInt("leveling.stats.level_procent");
    }
}
StatsContainer:
package net.baraban4ik.leveling.mixin.interfaces;

public interface StatsContainer {

    float getStats(String var);

    void setStats(String var, float value);
}
LevelingGui:
package net.baraban4ik.leveling.gui;

import io.github.cottonmc.cotton.gui.client.LightweightGuiDescription;
import io.github.cottonmc.cotton.gui.widget.WGridPanel;
import io.github.cottonmc.cotton.gui.widget.WLabel;
import io.github.cottonmc.cotton.gui.widget.data.HorizontalAlignment;
import net.baraban4ik.leveling.mixin.MixinEntityPlayer;
import net.baraban4ik.leveling.mixin.interfaces.StatsContainer;
import net.minecraft.client.MinecraftClient;
import net.minecraft.data.Main;
import net.minecraft.text.Text;

public class LevelingGui extends LightweightGuiDescription {
    
    public LevelingGui(){
        WGridPanel root = new WGridPanel();
        setRootPanel(root);
        root.setSize(300, 200);


        StatsContainer Stats = (StatsContainer) MinecraftClient.getInstance().getSession();
        WLabel title = new WLabel(Text.of(Float.toString(Stats.getStats("LEVEL"))));
        title.setHorizontalAlignment(HorizontalAlignment.CENTER);
        root.add(title, 0, 0, 4, 1);

    }

}
Ошибки:
Caused by: java.lang.RuntimeException: Mixin transformation of net.baraban4ik.leveling.mixin.interfaces.StatsContainer failed
Caused by: org.spongepowered.asm.mixin.transformer.throwables.IllegalClassLoadError: net.baraban4ik.leveling.mixin.interfaces.StatsContainer is in a defined mixin package net.baraban4ik.leveling.mixin.* owned by leveling.mixins.json and cannot be referenced directly
 
Сверху