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.block.*;
|
||||||
import com.raoulvdberge.refinedstorage.gui.GuiHandler;
|
import com.raoulvdberge.refinedstorage.gui.GuiHandler;
|
||||||
import com.raoulvdberge.refinedstorage.integration.craftingtweaks.IntegrationCraftingTweaks;
|
import com.raoulvdberge.refinedstorage.integration.craftingtweaks.IntegrationCraftingTweaks;
|
||||||
|
import com.raoulvdberge.refinedstorage.integration.forgeenergy.ReaderWriterHandlerForgeEnergy;
|
||||||
import com.raoulvdberge.refinedstorage.item.*;
|
import com.raoulvdberge.refinedstorage.item.*;
|
||||||
import com.raoulvdberge.refinedstorage.network.*;
|
import com.raoulvdberge.refinedstorage.network.*;
|
||||||
import com.raoulvdberge.refinedstorage.tile.*;
|
import com.raoulvdberge.refinedstorage.tile.*;
|
||||||
@@ -79,6 +80,7 @@ public class ProxyCommon {
|
|||||||
API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerItems.ID, ReaderWriterHandlerItems::new);
|
API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerItems.ID, ReaderWriterHandlerItems::new);
|
||||||
API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerFluids.ID, ReaderWriterHandlerFluids::new);
|
API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerFluids.ID, ReaderWriterHandlerFluids::new);
|
||||||
API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerRedstone.ID, tag -> new ReaderWriterHandlerRedstone());
|
API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerRedstone.ID, tag -> new ReaderWriterHandlerRedstone());
|
||||||
|
API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerForgeEnergy.ID, ReaderWriterHandlerForgeEnergy::new);
|
||||||
|
|
||||||
int id = 0;
|
int id = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ public class TileReader extends TileNode implements IReader {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateNode() {
|
public void updateNode() {
|
||||||
|
// NO OP
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user