Updates to the awareness block #55

Merged
BlakeRain merged 10 commits from BlakeRain/utamacraft:main into main 2024-01-23 14:41:55 +00:00
Showing only changes of commit cbba546e19 - Show all commits

View File

@ -1,11 +1,93 @@
package net.banutama.utamacraft.block.entity;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import net.banutama.utamacraft.util.ModEnergyStorage;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.game.ClientGamePacketListener;
import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ForgeCapabilities;
import net.minecraftforge.common.util.LazyOptional;
public class AwarenessBlockEntity extends BlockEntity {
private static final int ENERGY_REQUIRED = 32;
private final ModEnergyStorage energy = new ModEnergyStorage(60000, 256) {
@Override
public void onEnergyChanged() {
setChanged();
AwarenessBlockEntity.this.sendUpdate();
}
};
private final LazyOptional<ModEnergyStorage> energyOptional = LazyOptional.of(() -> energy);
public AwarenessBlockEntity(BlockPos pos, BlockState state) {
super(ModBlockEntities.AWARENESS_BLOCK.get(), pos, state);
}
@Override
public @NotNull <T> LazyOptional<T> getCapability(@NotNull Capability<T> cap, @Nullable Direction side) {
if (cap == ForgeCapabilities.ENERGY) {
return energyOptional.cast();
}
return super.getCapability(cap, side);
}
@Override
public void invalidateCaps() {
super.invalidateCaps();
energyOptional.invalidate();
}
@Override
protected void saveAdditional(@NotNull CompoundTag nbt) {
super.saveAdditional(nbt);
nbt.put("energy", energy.serializeNBT());
}
@Override
public void load(@NotNull CompoundTag nbt) {
super.load(nbt);
energy.deserializeNBT(nbt.getCompound("energy"));
}
@Override
public @NotNull CompoundTag getUpdateTag() {
CompoundTag nbt = super.getUpdateTag();
saveAdditional(nbt);
return nbt;
}
@Override
@Nullable
public Packet<ClientGamePacketListener> getUpdatePacket() {
return ClientboundBlockEntityDataPacket.create(this);
}
private void sendUpdate() {
setChanged();
if (this.level != null) {
this.level.sendBlockUpdated(this.worldPosition, getBlockState(), getBlockState(), Block.UPDATE_ALL);
}
}
public boolean deductEnergyUse() {
if (energy.getMaxEnergyStored() >= ENERGY_REQUIRED) {
energy.extractEnergy(ENERGY_REQUIRED, false);
return true;
}
return false;
}
}