diff --git a/src/main/java/com/raoulvdberge/refinedstorage/integration/forgeenergy/ReaderWriterHandlerForgeEnergy.java b/src/main/java/com/raoulvdberge/refinedstorage/integration/forgeenergy/ReaderWriterHandlerForgeEnergy.java new file mode 100755 index 000000000..4736f04b7 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/integration/forgeenergy/ReaderWriterHandlerForgeEnergy.java @@ -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 getCapability(IReaderWriter readerWriter, Capability 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; + } + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java index 394219d42..a1ba85584 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java @@ -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; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileReader.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileReader.java index 0420d4ed6..fdfe2020a 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileReader.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileReader.java @@ -55,6 +55,7 @@ public class TileReader extends TileNode implements IReader { @Override public void updateNode() { + // NO OP } @Override