81 lines
2.3 KiB
Java
81 lines
2.3 KiB
Java
package net.minecraft.client;
|
|
|
|
import com.mojang.datafixers.DataFixer;
|
|
import com.mojang.logging.LogUtils;
|
|
import com.mojang.serialization.DataResult;
|
|
import java.nio.file.Path;
|
|
import net.fabricmc.api.EnvType;
|
|
import net.fabricmc.api.Environment;
|
|
import net.minecraft.client.player.inventory.Hotbar;
|
|
import net.minecraft.nbt.CompoundTag;
|
|
import net.minecraft.nbt.NbtIo;
|
|
import net.minecraft.nbt.NbtOps;
|
|
import net.minecraft.nbt.NbtUtils;
|
|
import net.minecraft.nbt.Tag;
|
|
import net.minecraft.util.datafix.DataFixTypes;
|
|
import org.slf4j.Logger;
|
|
|
|
@Environment(EnvType.CLIENT)
|
|
public class HotbarManager {
|
|
private static final Logger LOGGER = LogUtils.getLogger();
|
|
public static final int NUM_HOTBAR_GROUPS = 9;
|
|
private final Path optionsFile;
|
|
private final DataFixer fixerUpper;
|
|
private final Hotbar[] hotbars = new Hotbar[9];
|
|
private boolean loaded;
|
|
|
|
public HotbarManager(Path gameDirectory, DataFixer fixerUpper) {
|
|
this.optionsFile = gameDirectory.resolve("hotbar.nbt");
|
|
this.fixerUpper = fixerUpper;
|
|
|
|
for (int i = 0; i < 9; i++) {
|
|
this.hotbars[i] = new Hotbar();
|
|
}
|
|
}
|
|
|
|
private void load() {
|
|
try {
|
|
CompoundTag compoundTag = NbtIo.read(this.optionsFile);
|
|
if (compoundTag == null) {
|
|
return;
|
|
}
|
|
|
|
int i = NbtUtils.getDataVersion(compoundTag, 1343);
|
|
compoundTag = DataFixTypes.HOTBAR.updateToCurrentVersion(this.fixerUpper, compoundTag, i);
|
|
|
|
for (int j = 0; j < 9; j++) {
|
|
this.hotbars[j] = (Hotbar)Hotbar.CODEC
|
|
.parse(NbtOps.INSTANCE, compoundTag.get(String.valueOf(j)))
|
|
.resultOrPartial(string -> LOGGER.warn("Failed to parse hotbar: {}", string))
|
|
.orElseGet(Hotbar::new);
|
|
}
|
|
} catch (Exception var4) {
|
|
LOGGER.error("Failed to load creative mode options", (Throwable)var4);
|
|
}
|
|
}
|
|
|
|
public void save() {
|
|
try {
|
|
CompoundTag compoundTag = NbtUtils.addCurrentDataVersion(new CompoundTag());
|
|
|
|
for (int i = 0; i < 9; i++) {
|
|
Hotbar hotbar = this.get(i);
|
|
DataResult<Tag> dataResult = Hotbar.CODEC.encodeStart(NbtOps.INSTANCE, hotbar);
|
|
compoundTag.put(String.valueOf(i), dataResult.getOrThrow());
|
|
}
|
|
|
|
NbtIo.write(compoundTag, this.optionsFile);
|
|
} catch (Exception var5) {
|
|
LOGGER.error("Failed to save creative mode options", (Throwable)var5);
|
|
}
|
|
}
|
|
|
|
public Hotbar get(int index) {
|
|
if (!this.loaded) {
|
|
this.load();
|
|
this.loaded = true;
|
|
}
|
|
|
|
return this.hotbars[index];
|
|
}
|
|
}
|