Get capabilities working (not tested)

This commit is contained in:
Robin Bärtschi 2024-06-04 09:00:58 +02:00
parent 351d05cbf5
commit 8fdca464a6
5 changed files with 90 additions and 3 deletions

View File

@ -19,6 +19,7 @@ import robaertschi.environmenttech.data.attachments.ETAttachments;
import robaertschi.environmenttech.data.capabilities.ETCapabilities;
import robaertschi.environmenttech.data.recipes.ETRecipes;
import robaertschi.environmenttech.level.block.ETBlocks;
import robaertschi.environmenttech.level.block.entity.ETBlockEntities;
import robaertschi.environmenttech.level.item.ETItems;
@Mod(EnvironmentTech.MODID)
@ -39,11 +40,12 @@ public class EnvironmentTech
modContainer.registerConfig(ModConfig.Type.COMMON, Config.SPEC);
ETAttachments.init(modEventBus);
ETCapabilities.init(modEventBus);
ETBlocks.init(modEventBus);
ETBlockEntities.init(modEventBus);
ETItems.init(modEventBus);
ETRecipes.init(modEventBus);
ETAttachments.init(modEventBus);
ETCapabilities.init(modEventBus);
NeoForge.EVENT_BUS.register(this);

View File

@ -2,8 +2,10 @@ package robaertschi.environmenttech.data.capabilities;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.neoforge.capabilities.BlockCapability;
import net.neoforged.neoforge.capabilities.Capabilities;
import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent;
import robaertschi.environmenttech.EnvironmentTech;
import robaertschi.environmenttech.level.block.entity.ETBlockEntities;
public class ETCapabilities {
public static final BlockCapability<IEnvStorage, EnvCapabilityContext> ENV_STORAGE_BLOCK =
@ -17,6 +19,17 @@ public class ETCapabilities {
}
private static void registerCapabilities(RegisterCapabilitiesEvent event) {
event.registerBlockEntity(
Capabilities.ItemHandler.BLOCK,
ETBlockEntities.ENV_COLLECTOR_BLOCK_ENTITY.get(),
(object, context) -> object.getInventory()
);
event.registerBlockEntity(
ENV_STORAGE_BLOCK,
ETBlockEntities.ENV_COLLECTOR_BLOCK_ENTITY.get(),
(object, context) -> object.getEnvStorage()
);
}
}

View File

@ -34,8 +34,10 @@ public class EnvStorage implements IEnvStorage {
@Override
public long receiveEnv(long amount, boolean simulate) {
long received = Mth.clamp(this.maxEnv - this.env, 0, Math.min(amount, maxTransfer));
if (!simulate)
if (!simulate) {
onContentsChanged();
env += received;
}
return received;
}
@ -45,6 +47,10 @@ public class EnvStorage implements IEnvStorage {
return env;
}
public void setEnvStored(long env) {
this.env = env;
}
@Override
public long getMaxEnv() {
return maxEnv;
@ -54,4 +60,6 @@ public class EnvStorage implements IEnvStorage {
public EnvType[] canAcceptEnvType() {
return acceptedEnvTypes;
}
public void onContentsChanged() {}
}

View File

@ -17,6 +17,7 @@ public interface IEnvStorage {
long getEnvStored();
long getMaxEnv();
/**
* @return Which ENVType's that are supported.
*/

View File

@ -1,11 +1,40 @@
package robaertschi.environmenttech.level.block.entity;
import lombok.Getter;
import net.minecraft.core.BlockPos;
import net.minecraft.core.HolderLookup;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.neoforged.neoforge.items.ItemStackHandler;
import org.jetbrains.annotations.NotNull;
import robaertschi.environmenttech.data.capabilities.EnvStorage;
import robaertschi.environmenttech.data.capabilities.EnvType;
import static robaertschi.environmenttech.EnvironmentTech.MODID;
public class EnvCollectorBlockEntity extends BlockEntity {
@Getter
private final ItemStackHandler inventory = new ItemStackHandler(2) {
@Override
protected void onContentsChanged(int slot) {
super.onContentsChanged(slot);
EnvCollectorBlockEntity.this.setChanged();
}
};
@Getter
private final EnvStorage envStorage = new EnvStorage(EnvType.Chunk, 64, 0, 1) {
@Override
public void onContentsChanged() {
super.onContentsChanged();
EnvCollectorBlockEntity.this.setChanged();
}
};
private int progress = 0;
@ -13,6 +42,40 @@ public class EnvCollectorBlockEntity extends BlockEntity {
super(ETBlockEntities.ENV_COLLECTOR_BLOCK_ENTITY.get(), pos, state);
}
@Override
protected void loadAdditional(@NotNull CompoundTag pTag, HolderLookup.@NotNull Provider provider) {
super.loadAdditional(pTag, provider);
CompoundTag modData = pTag.getCompound(MODID);
this.inventory.deserializeNBT(provider, modData.getCompound("Inventory"));
this.envStorage.setEnvStored(modData.getLong("ENV"));
}
@Override
protected void saveAdditional(@NotNull CompoundTag pTag, HolderLookup.@NotNull Provider provider) {
super.saveAdditional(pTag, provider);
CompoundTag modData = new CompoundTag();
modData.put("Inventory", inventory.serializeNBT(provider));
modData.putLong("ENV", envStorage.getEnvStored());
pTag.put(MODID, modData);
}
public ItemStack getInputItem() {
return this.inventory.getStackInSlot(0);
}
public ItemStack getOutputItem() {
return this.inventory.getStackInSlot(1);
}
public void setInputItem(ItemStack itemStack) {
this.inventory.setStackInSlot(0, itemStack);
}
public void setOutputItem(ItemStack itemStack) {
this.inventory.setStackInSlot(1, itemStack);
}
public static void tick(Level level, BlockPos blockPos, BlockState blockState, EnvCollectorBlockEntity envCollectorBlockEntity) {
}