adds fluid handling with pipes on fabric
This commit is contained in:
@@ -4,10 +4,10 @@ import net.cmr.jurassicrevived.block.entity.ModBlockEntities;
|
|||||||
import net.cmr.jurassicrevived.block.entity.custom.*;
|
import net.cmr.jurassicrevived.block.entity.custom.*;
|
||||||
import net.fabricmc.api.ModInitializer;
|
import net.fabricmc.api.ModInitializer;
|
||||||
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidStorage;
|
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidStorage;
|
||||||
import net.fabricmc.fabric.api.transfer.v1.item.ItemStorage;
|
|
||||||
import net.fabricmc.fabric.api.transfer.v1.item.ItemVariant;
|
|
||||||
import net.fabricmc.fabric.api.transfer.v1.storage.Storage;
|
|
||||||
import net.cmr.jurassicrevived.platform.FabricEnergyWrapper;
|
import net.cmr.jurassicrevived.platform.FabricEnergyWrapper;
|
||||||
|
import net.cmr.jurassicrevived.platform.FabricTransferHelper;
|
||||||
|
import net.fabricmc.api.ModInitializer;
|
||||||
|
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidStorage;
|
||||||
import team.reborn.energy.api.EnergyStorage;
|
import team.reborn.energy.api.EnergyStorage;
|
||||||
|
|
||||||
public class JRMod implements ModInitializer
|
public class JRMod implements ModInitializer
|
||||||
@@ -24,6 +24,11 @@ public class JRMod implements ModInitializer
|
|||||||
Constants.LOG.info("Hello Fabric world!");
|
Constants.LOG.info("Hello Fabric world!");
|
||||||
CommonClass.init();
|
CommonClass.init();
|
||||||
|
|
||||||
|
FluidStorage.SIDED.registerForBlockEntities((be, side) ->
|
||||||
|
new FabricTransferHelper.InternalFluidStorage(((TankBlockEntity) be).getFluidHandler(side)),
|
||||||
|
ModBlockEntities.TANK_BE.get()
|
||||||
|
);
|
||||||
|
|
||||||
EnergyStorage.SIDED.registerForBlockEntities((be, side) ->
|
EnergyStorage.SIDED.registerForBlockEntities((be, side) ->
|
||||||
new FabricEnergyWrapper(((PowerCellBlockEntity) be).getEnergyStorage(side)),
|
new FabricEnergyWrapper(((PowerCellBlockEntity) be).getEnergyStorage(side)),
|
||||||
ModBlockEntities.POWER_CELL_BE.get()
|
ModBlockEntities.POWER_CELL_BE.get()
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import net.fabricmc.fabric.api.transfer.v1.item.ItemVariant;
|
|||||||
import net.fabricmc.fabric.api.transfer.v1.storage.Storage;
|
import net.fabricmc.fabric.api.transfer.v1.storage.Storage;
|
||||||
import net.fabricmc.fabric.api.transfer.v1.storage.StorageView;
|
import net.fabricmc.fabric.api.transfer.v1.storage.StorageView;
|
||||||
import net.fabricmc.fabric.api.transfer.v1.transaction.Transaction;
|
import net.fabricmc.fabric.api.transfer.v1.transaction.Transaction;
|
||||||
|
import net.fabricmc.fabric.api.transfer.v1.transaction.TransactionContext;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.Direction;
|
import net.minecraft.core.Direction;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
@@ -25,6 +26,7 @@ import net.fabricmc.fabric.api.transfer.v1.transaction.Transaction;
|
|||||||
//import team.reborn.energy.api.EnergyStorage;
|
//import team.reborn.energy.api.EnergyStorage;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@@ -50,10 +52,93 @@ public class FabricTransferHelper implements ITransferHelper {
|
|||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class FabricFluidHandler implements PlatformFluidHandler {
|
public static class InternalFluidStorage implements Storage<FluidVariant> {
|
||||||
private final net.fabricmc.fabric.api.transfer.v1.storage.Storage<FluidVariant> storage;
|
private final net.cmr.jurassicrevived.platform.transfer.InternalFluidHandler handler;
|
||||||
|
|
||||||
private FabricFluidHandler(net.fabricmc.fabric.api.transfer.v1.storage.Storage<FluidVariant> storage) {
|
public InternalFluidStorage(net.cmr.jurassicrevived.platform.transfer.InternalFluidHandler handler) {
|
||||||
|
this.handler = handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long insert(FluidVariant resource, long maxAmount, TransactionContext transaction) {
|
||||||
|
if (resource.isBlank() || maxAmount <= 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
FluidStack stack = FluidStack.create(resource.getFluid(), maxAmount);
|
||||||
|
long inserted = handler.fill(stack, true);
|
||||||
|
|
||||||
|
if (inserted > 0) {
|
||||||
|
transaction.addCloseCallback((tx, result) -> {
|
||||||
|
if (result.wasCommitted()) {
|
||||||
|
handler.fill(FluidStack.create(resource.getFluid(), inserted), false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return inserted;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long extract(FluidVariant resource, long maxAmount, TransactionContext transaction) {
|
||||||
|
if (resource.isBlank() || maxAmount <= 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
FluidStack stored = handler.getFluid();
|
||||||
|
if (stored.isEmpty() || stored.getFluid() != resource.getFluid()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
long extracted = Math.min(maxAmount, stored.getAmount());
|
||||||
|
|
||||||
|
if (extracted > 0) {
|
||||||
|
transaction.addCloseCallback((tx, result) -> {
|
||||||
|
if (result.wasCommitted()) {
|
||||||
|
handler.drain(extracted, false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return extracted;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterator<StorageView<FluidVariant>> iterator() {
|
||||||
|
FluidStack stored = handler.getFluid();
|
||||||
|
return List.<StorageView<FluidVariant>>of(new StorageView<>() {
|
||||||
|
@Override
|
||||||
|
public FluidVariant getResource() {
|
||||||
|
return stored.isEmpty() ? FluidVariant.blank() : FluidVariant.of(stored.getFluid());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getAmount() {
|
||||||
|
return stored.getAmount();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getCapacity() {
|
||||||
|
return handler.getCapacity();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isResourceBlank() {
|
||||||
|
return stored.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long extract(FluidVariant resource, long maxAmount, TransactionContext transaction) {
|
||||||
|
return InternalFluidStorage.this.extract(resource, maxAmount, transaction);
|
||||||
|
}
|
||||||
|
}).iterator();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class FabricFluidHandler implements PlatformFluidHandler {
|
||||||
|
private final Storage<FluidVariant> storage;
|
||||||
|
|
||||||
|
private FabricFluidHandler(Storage<FluidVariant> storage) {
|
||||||
this.storage = storage;
|
this.storage = storage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user