NaturesAura/src/main/java/de/ellpeck/naturesaura/chunk/AuraChunkProvider.java

49 lines
1.6 KiB
Java
Raw Normal View History

package de.ellpeck.naturesaura.chunk;
import de.ellpeck.naturesaura.api.NaturesAuraAPI;
import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk;
import de.ellpeck.naturesaura.api.aura.type.IAuraType;
2019-10-20 22:30:49 +02:00
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.util.Direction;
import net.minecraft.world.chunk.Chunk;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ICapabilityProvider;
import net.minecraftforge.common.util.INBTSerializable;
2020-01-21 23:02:39 +01:00
import net.minecraftforge.common.util.LazyOptional;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
2019-10-20 22:30:49 +02:00
public class AuraChunkProvider implements ICapabilityProvider, INBTSerializable<CompoundNBT> {
private final Chunk chunk;
2020-10-19 21:26:32 +02:00
private final LazyOptional<IAuraChunk> lazyChunk = LazyOptional.of(this::getAuraChunk);
private IAuraChunk auraChunk;
public AuraChunkProvider(Chunk chunk) {
this.chunk = chunk;
}
private IAuraChunk getAuraChunk() {
if (this.auraChunk == null)
this.auraChunk = new AuraChunk(this.chunk, IAuraType.forWorld(this.chunk.getWorld()));
return this.auraChunk;
}
@Nullable
@Override
2020-01-21 23:02:39 +01:00
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> capability, @Nullable Direction facing) {
2020-10-19 21:26:32 +02:00
return capability == NaturesAuraAPI.capAuraChunk ? this.lazyChunk.cast() : LazyOptional.empty();
}
@Override
2019-10-20 22:30:49 +02:00
public CompoundNBT serializeNBT() {
return this.getAuraChunk().serializeNBT();
}
@Override
2019-10-20 22:30:49 +02:00
public void deserializeNBT(CompoundNBT nbt) {
this.getAuraChunk().deserializeNBT(nbt);
}
}