Skip to content

Commit

Permalink
Rest of the inkstorage refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
Electro593 committed Jan 16, 2025
1 parent 38a1afb commit 97a9cbd
Show file tree
Hide file tree
Showing 14 changed files with 36 additions and 119 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package de.dafuqs.spectrum.api.energy;

import de.dafuqs.spectrum.component_type.*;
import de.dafuqs.spectrum.registries.*;
import net.minecraft.item.*;

/**
Expand Down Expand Up @@ -38,7 +40,9 @@ public boolean canDrain(boolean isPlayer) {

PStorage getEnergyStorage(ItemStack itemStack);

void setEnergyStorage(ItemStack itemStack, InkStorage storage);
default void setEnergyStorage(ItemStack itemStack, InkStorage storage) {
itemStack.set(SpectrumDataComponentTypes.INK_STORAGE, new InkStorageComponent(storage));
}

ItemStack getDefaultStack();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
package de.dafuqs.spectrum.api.energy.storage;

import de.dafuqs.spectrum.api.energy.color.*;
import net.minecraft.nbt.*;
import org.jetbrains.annotations.*;

import java.util.*;

public class FixedSingleInkStorage extends SingleInkStorage {

Expand All @@ -17,16 +13,6 @@ public FixedSingleInkStorage(long maxEnergy, InkColor color, long amount) {
super(maxEnergy, color, amount);
}

public static FixedSingleInkStorage fromNbt(@NotNull NbtCompound compound) {
long maxEnergyTotal = compound.getLong("MaxEnergyTotal");
Optional<InkColor> color = InkColor.ofIdString(compound.getString("Color"));
if (color.isPresent()) {
long amount = compound.getLong("Amount");
return new FixedSingleInkStorage(maxEnergyTotal, color.get(), amount);
}
return new FixedSingleInkStorage(maxEnergyTotal, InkColors.CYAN, 0);
}

@Override
public boolean accepts(InkColor color) {
return this.storedColor == color;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@
import de.dafuqs.spectrum.registries.*;
import it.unimi.dsi.fastutil.objects.*;
import net.fabricmc.api.*;
import net.minecraft.nbt.*;
import net.minecraft.text.*;
import org.jetbrains.annotations.*;

import java.util.*;

Expand Down Expand Up @@ -128,19 +126,6 @@ public boolean isFull() {
return this.currentTotal >= this.getMaxTotal();
}

public static IndividualCappedInkStorage fromNbt(@NotNull NbtCompound compound) {
long maxEnergyPerColor = compound.getLong("MaxEnergyPerColor");
Map<InkColor, Long> colors = InkStorage.readEnergy(compound.getCompound("Energy"));
return new IndividualCappedInkStorage(maxEnergyPerColor, colors);
}

public NbtCompound toNbt() {
NbtCompound compound = new NbtCompound();
compound.putLong("MaxEnergyPerColor", this.maxEnergyPerColor);
compound.put("Energy", InkStorage.writeEnergy(this.storedEnergy));
return compound;
}

@Override
@Environment(EnvType.CLIENT)
public void addTooltip(List<Text> tooltip) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@

import de.dafuqs.spectrum.api.energy.*;
import de.dafuqs.spectrum.api.energy.color.*;
import net.minecraft.nbt.*;
import net.minecraft.text.*;
import org.jetbrains.annotations.*;

import java.util.*;

Expand Down Expand Up @@ -32,24 +30,6 @@ public SingleInkStorage(long maxEnergy, InkColor color, long amount) {
this.storedEnergy = amount;
}

public NbtCompound toNbt() {
NbtCompound compound = new NbtCompound();
compound.putLong("MaxEnergyTotal", this.maxEnergy);
compound.putString("Color", this.storedColor.getID().toString());
compound.putLong("Amount", this.storedEnergy);
return compound;
}

public static SingleInkStorage fromNbt(@NotNull NbtCompound compound) {
long maxEnergyTotal = compound.getLong("MaxEnergyTotal");
Optional<InkColor> color = InkColor.ofIdString(compound.getString("Color"));
if (color.isPresent()) {
long amount = compound.getLong("Amount");
return new SingleInkStorage(maxEnergyTotal, color.get(), amount);
}
return new SingleInkStorage(maxEnergyTotal, InkColors.CYAN, 0);
}

public InkColor getStoredColor() {
return storedColor;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@
import de.dafuqs.spectrum.registries.*;
import it.unimi.dsi.fastutil.objects.*;
import net.fabricmc.api.*;
import net.minecraft.nbt.*;
import net.minecraft.text.*;
import org.jetbrains.annotations.*;

import java.util.*;

Expand Down Expand Up @@ -107,19 +105,6 @@ public boolean isFull() {
return this.currentTotal >= this.maxEnergyTotal;
}

public NbtCompound toNbt() {
NbtCompound compound = new NbtCompound();
compound.putLong("MaxEnergyTotal", this.maxEnergyTotal);
compound.put("Energy", InkStorage.writeEnergy(this.storedEnergy));
return compound;
}

public static TotalCappedInkStorage fromNbt(@NotNull NbtCompound compound) {
long maxEnergyTotal = compound.getLong("MaxEnergyTotal");
Map<InkColor, Long> colors = InkStorage.readEnergy(compound.getCompound("Energy"));
return new TotalCappedInkStorage(maxEnergyTotal, colors);
}

@Override
public long getRoom(InkColor color) {
return this.maxEnergyTotal - this.currentTotal;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import de.dafuqs.spectrum.api.recipe.*;
import de.dafuqs.spectrum.blocks.BlockPosDelegate;
import de.dafuqs.spectrum.blocks.upgrade.*;
import de.dafuqs.spectrum.component_type.*;
import de.dafuqs.spectrum.helpers.*;
import de.dafuqs.spectrum.inventories.*;
import de.dafuqs.spectrum.networking.s2c_payloads.*;
Expand Down Expand Up @@ -209,9 +210,9 @@ public void readNbt(NbtCompound nbt, RegistryWrapper.WrapperLookup registryLooku
super.readNbt(nbt, registryLookup);

Inventories.readNbt(nbt, this.inventory, registryLookup);
if (nbt.contains("InkStorage", NbtElement.COMPOUND_TYPE)) {
this.inkStorage = IndividualCappedInkStorage.fromNbt(nbt.getCompound("InkStorage"));
}

CodecHelper.fromNbt(InkStorageComponent.CODEC, nbt.get("InkStorage"), storage ->
this.inkStorage = new IndividualCappedInkStorage(storage.maxEnergyTotal(), storage.storedEnergy()));
this.craftingTime = nbt.getShort("CraftingTime");
this.craftingTimeTotal = nbt.getShort("CraftingTimeTotal");
this.usesEfficiency = nbt.getBoolean("UsesEfficiency");
Expand All @@ -235,7 +236,7 @@ public void readNbt(NbtCompound nbt, RegistryWrapper.WrapperLookup registryLooku
public void writeNbt(NbtCompound nbt, RegistryWrapper.WrapperLookup registryLookup) {
super.writeNbt(nbt, registryLookup);
Inventories.writeNbt(nbt, this.inventory, registryLookup);
nbt.put("InkStorage", this.inkStorage.toNbt());
CodecHelper.writeNbt(nbt, "InkStorage", InkStorageComponent.CODEC, new InkStorageComponent(this.inkStorage));
nbt.putShort("CraftingTime", (short) this.craftingTime);
nbt.putShort("CraftingTimeTotal", (short) this.craftingTimeTotal);
nbt.putBoolean("UsesEfficiency", this.usesEfficiency);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import de.dafuqs.spectrum.api.energy.*;
import de.dafuqs.spectrum.api.energy.storage.*;
import de.dafuqs.spectrum.blocks.*;
import de.dafuqs.spectrum.component_type.*;
import de.dafuqs.spectrum.helpers.*;
import de.dafuqs.spectrum.particle.*;
import de.dafuqs.spectrum.progression.*;
Expand Down Expand Up @@ -172,9 +173,8 @@ public void inventoryChanged() {
public void readNbt(NbtCompound nbt, RegistryWrapper.WrapperLookup registryLookup) {
super.readNbt(nbt, registryLookup);

if (nbt.contains("InkStorage", NbtElement.COMPOUND_TYPE)) {
this.inkStorage = IndividualCappedInkStorage.fromNbt(nbt.getCompound("InkStorage"));
}
CodecHelper.fromNbt(InkStorageComponent.CODEC, nbt.get("InkStorage"),storage ->
this.inkStorage = new IndividualCappedInkStorage(storage.maxEnergyTotal(), storage.storedEnergy()));
if (nbt.contains("Looper", NbtElement.COMPOUND_TYPE)) {
this.tickLooper.readNbt(nbt.getCompound("Looper"));
}
Expand All @@ -193,7 +193,7 @@ public void readNbt(NbtCompound nbt, RegistryWrapper.WrapperLookup registryLooku
public void writeNbt(NbtCompound nbt, RegistryWrapper.WrapperLookup registryLookup) {
super.writeNbt(nbt, registryLookup);

nbt.put("InkStorage", this.inkStorage.toNbt());
CodecHelper.writeNbt(nbt, "InkStorage", InkStorageComponent.CODEC, new InkStorageComponent(this.inkStorage));
nbt.put("Looper", this.tickLooper.toNbt());

nbt.putBoolean("CanWork", this.canWork);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import de.dafuqs.spectrum.api.energy.color.*;
import de.dafuqs.spectrum.api.energy.storage.*;
import de.dafuqs.spectrum.blocks.BlockPosDelegate;
import de.dafuqs.spectrum.component_type.*;
import de.dafuqs.spectrum.helpers.*;
import de.dafuqs.spectrum.inventories.*;
import de.dafuqs.spectrum.networking.s2c_payloads.*;
import de.dafuqs.spectrum.particle.*;
Expand Down Expand Up @@ -111,9 +113,8 @@ public void readNbt(NbtCompound nbt, RegistryWrapper.WrapperLookup registryLooku
if (!this.readLootTable(nbt)) {
Inventories.readNbt(nbt, this.inventory, registryLookup);
}
if (nbt.contains("InkStorage", NbtElement.COMPOUND_TYPE)) {
this.inkStorage = TotalCappedInkStorage.fromNbt(nbt.getCompound("InkStorage"));
}
CodecHelper.fromNbt(InkStorageComponent.CODEC, nbt.get("InkStorage"), storage ->
this.inkStorage = new TotalCappedInkStorage(storage.maxEnergyTotal(), storage.storedEnergy()));
this.ownerUUID = PlayerOwned.readOwnerUUID(nbt);
if (nbt.contains("SelectedColor", NbtElement.STRING_TYPE)) {
this.selectedColor = InkColor.ofIdString(nbt.getString("SelectedColor")).orElse(InkColors.CYAN);
Expand All @@ -126,7 +127,7 @@ protected void writeNbt(NbtCompound nbt, RegistryWrapper.WrapperLookup registryL
if (!this.writeLootTable(nbt)) {
Inventories.writeNbt(nbt, this.inventory, registryLookup);
}
nbt.put("InkStorage", this.inkStorage.toNbt());
CodecHelper.writeNbt(nbt, "InkStorage", InkStorageComponent.CODEC, new InkStorageComponent(this.inkStorage));
PlayerOwned.writeOwnerUUID(nbt, this.ownerUUID);
if (this.selectedColor != null) {
nbt.putString("SelectedColor", this.selectedColor.getID().toString());
Expand Down
10 changes: 7 additions & 3 deletions src/main/java/de/dafuqs/spectrum/helpers/CodecHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@
import com.mojang.datafixers.util.Pair;
import com.mojang.serialization.Codec;
import io.netty.buffer.ByteBuf;
import net.minecraft.nbt.NbtElement;
import net.minecraft.nbt.NbtOps;
import net.minecraft.nbt.*;
import net.minecraft.network.codec.PacketCodec;
import net.minecraft.network.codec.PacketCodecs;

Expand All @@ -20,11 +19,16 @@ public static <E extends Enum<?>> PacketCodec<ByteBuf, E> ofPacketEnum(Class<E>
}

public static <T> void fromNbt(Codec<T> codec, NbtElement nbt, Consumer<? super T> ifValid) {
codec.decode(NbtOps.INSTANCE, nbt).result().map(Pair::getFirst).ifPresent(ifValid);
if (nbt != null)
codec.decode(NbtOps.INSTANCE, nbt).result().map(Pair::getFirst).ifPresent(ifValid);
}

public static <T> void toNbt(Codec<T> codec, T value, Consumer<? super NbtElement> ifValid) {
codec.encodeStart(NbtOps.INSTANCE, value).result().ifPresent(ifValid);
}

public static <T> void writeNbt(NbtCompound nbt, String key, Codec<T> codec, T value) {
toNbt(codec, value, elem -> nbt.put(key, elem));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import de.dafuqs.spectrum.api.energy.storage.*;
import de.dafuqs.spectrum.api.item.*;
import de.dafuqs.spectrum.api.render.*;
import de.dafuqs.spectrum.component_type.*;
import de.dafuqs.spectrum.helpers.*;
import de.dafuqs.spectrum.items.trinkets.*;
import de.dafuqs.spectrum.registries.*;
Expand Down Expand Up @@ -51,11 +50,6 @@ public ItemStack getDefaultStack() {
return super.getDefaultStack();
}

@Override
public void setEnergyStorage(ItemStack itemStack, InkStorage storage) {
itemStack.set(SpectrumDataComponentTypes.INK_STORAGE, new InkStorageComponent(storage));
}

@Override
@Environment(EnvType.CLIENT)
public void appendTooltip(ItemStack stack, TooltipContext context, List<Text> tooltip, TooltipType type) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import de.dafuqs.spectrum.api.energy.color.*;
import de.dafuqs.spectrum.api.energy.storage.*;
import de.dafuqs.spectrum.api.render.*;
import de.dafuqs.spectrum.component_type.*;
import de.dafuqs.spectrum.helpers.*;
import de.dafuqs.spectrum.registries.*;
import net.fabricmc.api.*;
Expand Down Expand Up @@ -45,11 +44,6 @@ public ItemStack getDefaultStack() {
return super.getDefaultStack();
}

@Override
public void setEnergyStorage(ItemStack itemStack, InkStorage storage) {
itemStack.set(SpectrumDataComponentTypes.INK_STORAGE, new InkStorageComponent(storage));
}

@Override
@Environment(EnvType.CLIENT)
public void appendTooltip(ItemStack stack, TooltipContext context, List<Text> tooltip, TooltipType type) {
Expand Down
12 changes: 2 additions & 10 deletions src/main/java/de/dafuqs/spectrum/items/energy/InkFlaskItem.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import de.dafuqs.spectrum.api.energy.storage.*;
import de.dafuqs.spectrum.api.item.*;
import de.dafuqs.spectrum.api.render.*;
import de.dafuqs.spectrum.component_type.*;
import de.dafuqs.spectrum.helpers.*;
import de.dafuqs.spectrum.registries.*;
import net.fabricmc.api.*;
Expand Down Expand Up @@ -36,11 +35,9 @@ public Drainability getDrainability() {
@Override
public SingleInkStorage getEnergyStorage(ItemStack itemStack) {
var storage = itemStack.get(SpectrumDataComponentTypes.INK_STORAGE);
if (storage != null) {
for (var entry : storage.storedEnergy().entrySet()) {
if (storage != null)
for (var entry : storage.storedEnergy().entrySet())
return new SingleInkStorage(storage.maxEnergyTotal(), entry.getKey(), entry.getValue());
}
}
return new SingleInkStorage(this.maxEnergy);
}

Expand All @@ -50,11 +47,6 @@ public ItemStack getDefaultStack() {
return super.getDefaultStack();
}

@Override
public void setEnergyStorage(ItemStack itemStack, InkStorage storage) {
itemStack.set(SpectrumDataComponentTypes.INK_STORAGE, new InkStorageComponent(storage));
}

@Override
@Environment(EnvType.CLIENT)
public void appendTooltip(ItemStack stack, TooltipContext context, List<Text> tooltip, TooltipType type) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import de.dafuqs.spectrum.api.energy.storage.*;
import de.dafuqs.spectrum.api.item.*;
import de.dafuqs.spectrum.api.render.*;
import de.dafuqs.spectrum.component_type.*;
import de.dafuqs.spectrum.helpers.*;
import de.dafuqs.spectrum.items.trinkets.*;
import de.dafuqs.spectrum.registries.*;
Expand Down Expand Up @@ -51,11 +50,6 @@ public ItemStack getDefaultStack() {
return super.getDefaultStack();
}

@Override
public void setEnergyStorage(ItemStack itemStack, InkStorage storage) {
itemStack.set(SpectrumDataComponentTypes.INK_STORAGE, new InkStorageComponent(storage));
}

@Override
@Environment(EnvType.CLIENT)
public void appendTooltip(ItemStack stack, TooltipContext context, List<Text> tooltip, TooltipType type) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@
import de.dafuqs.spectrum.api.energy.color.*;
import de.dafuqs.spectrum.api.energy.storage.*;
import de.dafuqs.spectrum.api.render.*;
import de.dafuqs.spectrum.component_type.*;
import de.dafuqs.spectrum.helpers.*;
import de.dafuqs.spectrum.registries.*;
import net.minecraft.component.DataComponentTypes;
import net.minecraft.component.type.NbtComponent;
import net.minecraft.entity.player.*;
import net.minecraft.item.*;
import net.minecraft.item.tooltip.TooltipType;
Expand Down Expand Up @@ -76,21 +77,17 @@ public Drainability getDrainability() {

@Override
public FixedSingleInkStorage getEnergyStorage(ItemStack itemStack) {
var compound = itemStack.get(DataComponentTypes.CUSTOM_DATA);
if (compound != null && compound.contains("EnergyStore")) {
return FixedSingleInkStorage.fromNbt(compound.copyNbt().getCompound("EnergyStore"));
}
var storage = itemStack.get(SpectrumDataComponentTypes.INK_STORAGE);
if (storage != null)
for (var entry : storage.storedEnergy().entrySet())
return new FixedSingleInkStorage(storage.maxEnergyTotal(), entry.getKey(), entry.getValue());
return new FixedSingleInkStorage(MAX_INK, inkColor);
}

@Override
public void setEnergyStorage(ItemStack itemStack, InkStorage storage) {
if (storage instanceof FixedSingleInkStorage fixedSingleInkStorage) {
itemStack.apply(DataComponentTypes.CUSTOM_DATA, NbtComponent.DEFAULT,
comp -> comp.apply(nbt -> nbt.put("EnergyStore", fixedSingleInkStorage.toNbt())));

itemStack.set(DataComponentTypes.RARITY, storage.isFull() ? Rarity.EPIC : super.getDefaultStack().get(DataComponentTypes.RARITY));
}
itemStack.set(SpectrumDataComponentTypes.INK_STORAGE, new InkStorageComponent(storage));
itemStack.set(DataComponentTypes.RARITY, storage.isFull() ? Rarity.EPIC : super.getDefaultStack().get(DataComponentTypes.RARITY));
}

@Override
Expand Down

0 comments on commit 97a9cbd

Please sign in to comment.