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.capabilities.ETCapabilities;
import robaertschi.environmenttech.data.recipes.ETRecipes; import robaertschi.environmenttech.data.recipes.ETRecipes;
import robaertschi.environmenttech.level.block.ETBlocks; import robaertschi.environmenttech.level.block.ETBlocks;
import robaertschi.environmenttech.level.block.entity.ETBlockEntities;
import robaertschi.environmenttech.level.item.ETItems; import robaertschi.environmenttech.level.item.ETItems;
@Mod(EnvironmentTech.MODID) @Mod(EnvironmentTech.MODID)
@ -39,11 +40,12 @@ public class EnvironmentTech
modContainer.registerConfig(ModConfig.Type.COMMON, Config.SPEC); modContainer.registerConfig(ModConfig.Type.COMMON, Config.SPEC);
ETAttachments.init(modEventBus);
ETCapabilities.init(modEventBus);
ETBlocks.init(modEventBus); ETBlocks.init(modEventBus);
ETBlockEntities.init(modEventBus);
ETItems.init(modEventBus); ETItems.init(modEventBus);
ETRecipes.init(modEventBus); ETRecipes.init(modEventBus);
ETAttachments.init(modEventBus);
ETCapabilities.init(modEventBus);
NeoForge.EVENT_BUS.register(this); 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.bus.api.IEventBus;
import net.neoforged.neoforge.capabilities.BlockCapability; import net.neoforged.neoforge.capabilities.BlockCapability;
import net.neoforged.neoforge.capabilities.Capabilities;
import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent; import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent;
import robaertschi.environmenttech.EnvironmentTech; import robaertschi.environmenttech.EnvironmentTech;
import robaertschi.environmenttech.level.block.entity.ETBlockEntities;
public class ETCapabilities { public class ETCapabilities {
public static final BlockCapability<IEnvStorage, EnvCapabilityContext> ENV_STORAGE_BLOCK = public static final BlockCapability<IEnvStorage, EnvCapabilityContext> ENV_STORAGE_BLOCK =
@ -17,6 +19,17 @@ public class ETCapabilities {
} }
private static void registerCapabilities(RegisterCapabilitiesEvent event) { 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 @Override
public long receiveEnv(long amount, boolean simulate) { public long receiveEnv(long amount, boolean simulate) {
long received = Mth.clamp(this.maxEnv - this.env, 0, Math.min(amount, maxTransfer)); long received = Mth.clamp(this.maxEnv - this.env, 0, Math.min(amount, maxTransfer));
if (!simulate) if (!simulate) {
onContentsChanged();
env += received; env += received;
}
return received; return received;
} }
@ -45,6 +47,10 @@ public class EnvStorage implements IEnvStorage {
return env; return env;
} }
public void setEnvStored(long env) {
this.env = env;
}
@Override @Override
public long getMaxEnv() { public long getMaxEnv() {
return maxEnv; return maxEnv;
@ -54,4 +60,6 @@ public class EnvStorage implements IEnvStorage {
public EnvType[] canAcceptEnvType() { public EnvType[] canAcceptEnvType() {
return acceptedEnvTypes; return acceptedEnvTypes;
} }
public void onContentsChanged() {}
} }

View File

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

View File

@ -1,11 +1,40 @@
package robaertschi.environmenttech.level.block.entity; package robaertschi.environmenttech.level.block.entity;
import lombok.Getter;
import net.minecraft.core.BlockPos; 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.Level;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState; 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 { 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; private int progress = 0;
@ -13,6 +42,40 @@ public class EnvCollectorBlockEntity extends BlockEntity {
super(ETBlockEntities.ENV_COLLECTOR_BLOCK_ENTITY.get(), pos, state); 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) { public static void tick(Level level, BlockPos blockPos, BlockState blockState, EnvCollectorBlockEntity envCollectorBlockEntity) {
} }