Added reader writer handler for forge energy
This commit is contained in:
@@ -0,0 +1,114 @@
|
||||
package com.raoulvdberge.refinedstorage.integration.forgeenergy;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReader;
|
||||
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterChannel;
|
||||
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterHandler;
|
||||
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IWriter;
|
||||
import com.raoulvdberge.refinedstorage.tile.IReaderWriter;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraftforge.common.capabilities.Capability;
|
||||
import net.minecraftforge.energy.CapabilityEnergy;
|
||||
import net.minecraftforge.energy.EnergyStorage;
|
||||
import net.minecraftforge.energy.IEnergyStorage;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class ReaderWriterHandlerForgeEnergy implements IReaderWriterHandler {
|
||||
public static final String ID = "forgeenergy";
|
||||
|
||||
private static final String NBT_ENERGY_STORED = "EnergyStored";
|
||||
|
||||
private EnergyStorage storage;
|
||||
private EnergyStorageReaderWriter storageReader, storageWriter;
|
||||
|
||||
public ReaderWriterHandlerForgeEnergy(@Nullable NBTTagCompound tag) {
|
||||
this.storage = new EnergyStorage(4000);
|
||||
this.storageReader = new EnergyStorageReaderWriter(storage, false, true);
|
||||
this.storageWriter = new EnergyStorageReaderWriter(storage, true, false);
|
||||
|
||||
if (tag != null && tag.hasKey(NBT_ENERGY_STORED)) {
|
||||
storage.receiveEnergy(tag.getInteger(NBT_ENERGY_STORED), false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(IReaderWriterChannel channel) {
|
||||
// NO OP
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWriterDisabled(IWriter writer) {
|
||||
// NO OP
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasCapability(IReaderWriter readerWriter, Capability<?> capability) {
|
||||
return capability == CapabilityEnergy.ENERGY && (readerWriter instanceof IReader || readerWriter instanceof IWriter);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T getCapability(IReaderWriter readerWriter, Capability<T> capability) {
|
||||
if (capability == CapabilityEnergy.ENERGY) {
|
||||
if (readerWriter instanceof IReader) {
|
||||
return (T) storageReader;
|
||||
} else if (readerWriter instanceof IWriter) {
|
||||
return (T) storageWriter;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NBTTagCompound writeToNBT(NBTTagCompound tag) {
|
||||
tag.setInteger(NBT_ENERGY_STORED, storage.getEnergyStored());
|
||||
|
||||
return tag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getId() {
|
||||
return ID;
|
||||
}
|
||||
|
||||
private class EnergyStorageReaderWriter implements IEnergyStorage {
|
||||
private IEnergyStorage parent;
|
||||
private boolean canExtract, canReceive;
|
||||
|
||||
public EnergyStorageReaderWriter(IEnergyStorage parent, boolean canExtract, boolean canReceive) {
|
||||
this.canExtract = canExtract;
|
||||
this.canReceive = canReceive;
|
||||
this.parent = parent;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int receiveEnergy(int maxReceive, boolean simulate) {
|
||||
return canReceive ? parent.receiveEnergy(maxReceive, simulate) : 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int extractEnergy(int maxExtract, boolean simulate) {
|
||||
return canExtract ? parent.extractEnergy(maxExtract, simulate) : 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getEnergyStored() {
|
||||
return parent.getEnergyStored();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxEnergyStored() {
|
||||
return parent.getMaxEnergyStored();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canExtract() {
|
||||
return canExtract;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canReceive() {
|
||||
return canReceive;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -18,6 +18,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.storage.item.ItemStorageNBT;
|
||||
import com.raoulvdberge.refinedstorage.block.*;
|
||||
import com.raoulvdberge.refinedstorage.gui.GuiHandler;
|
||||
import com.raoulvdberge.refinedstorage.integration.craftingtweaks.IntegrationCraftingTweaks;
|
||||
import com.raoulvdberge.refinedstorage.integration.forgeenergy.ReaderWriterHandlerForgeEnergy;
|
||||
import com.raoulvdberge.refinedstorage.item.*;
|
||||
import com.raoulvdberge.refinedstorage.network.*;
|
||||
import com.raoulvdberge.refinedstorage.tile.*;
|
||||
@@ -79,6 +80,7 @@ public class ProxyCommon {
|
||||
API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerItems.ID, ReaderWriterHandlerItems::new);
|
||||
API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerFluids.ID, ReaderWriterHandlerFluids::new);
|
||||
API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerRedstone.ID, tag -> new ReaderWriterHandlerRedstone());
|
||||
API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerForgeEnergy.ID, ReaderWriterHandlerForgeEnergy::new);
|
||||
|
||||
int id = 0;
|
||||
|
||||
|
||||
@@ -55,6 +55,7 @@ public class TileReader extends TileNode implements IReader {
|
||||
|
||||
@Override
|
||||
public void updateNode() {
|
||||
// NO OP
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user