Added reader writer handler for forge energy

This commit is contained in:
Raoul Van den Berge
2016-11-12 11:30:21 +01:00
parent 9b7f0824df
commit 66785c689a
3 changed files with 117 additions and 0 deletions

View File

@@ -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;
}
}
}

View File

@@ -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;

View File

@@ -55,6 +55,7 @@ public class TileReader extends TileNode implements IReader {
@Override
public void updateNode() {
// NO OP
}
@Override