Skip to content

Commit

Permalink
feat: Add support for Reborn Energy API #67
Browse files Browse the repository at this point in the history
  • Loading branch information
BlayTheNinth committed May 23, 2024
1 parent 3028764 commit 406425a
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 0 deletions.
2 changes: 2 additions & 0 deletions fabric/dependencies.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,6 @@ dependencies {

modCompileOnly "me.shedaniel.cloth:cloth-config-fabric:11.0.99"
modCompileOnly("de.siphalor:amecsapi-1.20:1.5.2+mc1.20-pre1")

include modApi('teamreborn:energy:4.0.1')
}
14 changes: 14 additions & 0 deletions fabric/src/main/java/net/blay09/mods/balm/fabric/FabricBalm.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@
import net.blay09.mods.balm.api.Balm;
import net.blay09.mods.balm.api.config.AbstractBalmConfig;
import net.blay09.mods.balm.api.container.BalmContainerProvider;
import net.blay09.mods.balm.api.energy.BalmEnergyStorageProvider;
import net.blay09.mods.balm.api.entity.BalmEntity;
import net.blay09.mods.balm.api.fluid.BalmFluidTankProvider;
import net.blay09.mods.balm.api.fluid.FluidTank;
import net.blay09.mods.balm.config.ExampleConfig;
import net.blay09.mods.balm.config.ExampleConfigData;
import net.blay09.mods.balm.fabric.energy.FabricBalmEnergyStorage;
import net.blay09.mods.balm.fabric.fluid.BalmFluidStorage;
import net.blay09.mods.balm.fabric.provider.FabricBalmProviders;
import net.fabricmc.api.ModInitializer;
Expand All @@ -18,6 +20,7 @@
import net.minecraft.nbt.CompoundTag;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.Container;
import team.reborn.energy.api.EnergyStorage;

public class FabricBalm implements ModInitializer {

Expand Down Expand Up @@ -54,5 +57,16 @@ public void onInitialize() {

return null;
});

EnergyStorage.SIDED.registerFallback((world, pos, state, blockEntity, direction) -> {
if (blockEntity instanceof BalmEnergyStorageProvider energyStorageProvider) {
final var energyStorage = energyStorageProvider.getEnergyStorage(direction);
if (energyStorage != null) {
return new FabricBalmEnergyStorage(energyStorage);
}
}

return null;
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package net.blay09.mods.balm.fabric.energy;

import net.fabricmc.fabric.api.transfer.v1.storage.StoragePreconditions;
import net.fabricmc.fabric.api.transfer.v1.transaction.TransactionContext;
import net.fabricmc.fabric.api.transfer.v1.transaction.base.SnapshotParticipant;
import team.reborn.energy.api.EnergyStorage;

public class FabricBalmEnergyStorage extends SnapshotParticipant<Long> implements EnergyStorage {

private final net.blay09.mods.balm.api.energy.EnergyStorage energyStorage;

public FabricBalmEnergyStorage(net.blay09.mods.balm.api.energy.EnergyStorage energyStorage) {
this.energyStorage = energyStorage;
}

@Override
public long insert(long maxAmount, TransactionContext transaction) {
StoragePreconditions.notNegative(maxAmount);
updateSnapshots(transaction);
return energyStorage.fill((int) maxAmount, false);
}

@Override
public long extract(long maxAmount, TransactionContext transaction) {
StoragePreconditions.notNegative(maxAmount);
updateSnapshots(transaction);
return energyStorage.drain((int) maxAmount, false);
}

@Override
public long getAmount() {
return energyStorage.getEnergy();
}

@Override
public long getCapacity() {
return energyStorage.getCapacity();
}

@Override
protected Long createSnapshot() {
return (long) energyStorage.getEnergy();
}

@Override
protected void readSnapshot(Long snapshot) {
energyStorage.setEnergy(snapshot.intValue());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,14 @@ public long insert(FluidVariant fluidVariant, long maxAmount, TransactionContext
StoragePreconditions.notBlankNotNegative(fluidVariant, maxAmount);

if (getAmount() == 0) {
updateSnapshots(transaction);
return fluidTank.fill(fluidVariant.getFluid(), Ints.saturatedCast(maxAmount), false);
}

if (fluidVariant.isOf(getResource().getFluid())) {
// Otherwise we can only accept the same fluid as the current one.
long amountInserted = Math.min(maxAmount, getCapacity() - getAmount());
updateSnapshots(transaction);
return fluidTank.fill(fluidVariant.getFluid(), Ints.saturatedCast(amountInserted), false);
} else {
return 0;
Expand Down

0 comments on commit 406425a

Please sign in to comment.