From 729237918c467244f610940a03073ef5287da047 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Fri, 11 Nov 2016 16:14:01 +0100 Subject: [PATCH] Redstone reader writer handler --- .../ReaderWriterHandlerRedstone.java | 53 +++++++++++++++++++ .../refinedstorage/block/BlockWriter.java | 21 ++++++++ .../refinedstorage/proxy/ProxyCommon.java | 2 + .../refinedstorage/tile/TileWriter.java | 6 +-- 4 files changed, 79 insertions(+), 3 deletions(-) create mode 100755 src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerRedstone.java diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerRedstone.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerRedstone.java new file mode 100755 index 000000000..a8a407372 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerRedstone.java @@ -0,0 +1,53 @@ +package com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter; + +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 net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.capabilities.Capability; + +import javax.annotation.Nullable; + +public class ReaderWriterHandlerRedstone implements IReaderWriterHandler { + public static final String ID = "redstone"; + + @Override + public void update(IReaderWriterChannel channel) { + int strength = 0; + + for (IReader reader : channel.getReaders()) { + strength += reader.getRedstoneStrength(); + } + + for (IWriter writer : channel.getWriters()) { + writer.setRedstoneStrength(strength); + } + } + + @Override + public void onConnectionChange(boolean state) { + // @TODO: Destroy redstone strength + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound tag) { + return tag; + } + + @Override + public String getId() { + return ID; + } + + @Override + public boolean hasCapability(Capability capability, @Nullable EnumFacing facing) { + return false; + } + + @Override + public T getCapability(Capability capability, @Nullable EnumFacing facing) { + return null; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockWriter.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockWriter.java index 6a3d1d0f4..2793397ab 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockWriter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockWriter.java @@ -10,6 +10,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class BlockWriter extends BlockNode { @@ -33,6 +34,26 @@ public class BlockWriter extends BlockNode { return new TileWriter(); } + @Override + @SuppressWarnings("deprecation") + public int getWeakPower(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side) { + TileWriter writer = (TileWriter) world.getTileEntity(pos); + + return side == writer.getDirection().getOpposite() ? writer.getRedstoneStrength() : 0; + } + + @Override + @SuppressWarnings("deprecation") + public int getStrongPower(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side) { + return getWeakPower(state, world, pos, side); + } + + @Override + @SuppressWarnings("deprecation") + public boolean canProvidePower(IBlockState state) { + return true; + } + @Override public EnumPlacementType getPlacementType() { return EnumPlacementType.ANY; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java index f3b9f2150..7a4a61077 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java @@ -10,6 +10,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.CraftingPrev import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.CraftingPreviewElementItemStack; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.registry.CraftingTaskFactory; import com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter.ReaderWriterHandlerItems; +import com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter.ReaderWriterHandlerRedstone; import com.raoulvdberge.refinedstorage.apiimpl.solderer.*; import com.raoulvdberge.refinedstorage.apiimpl.storage.fluid.FluidStorageNBT; import com.raoulvdberge.refinedstorage.apiimpl.storage.item.ItemStorageNBT; @@ -75,6 +76,7 @@ public class ProxyCommon { API.instance().getCraftingPreviewElementRegistry().add(CraftingPreviewElementFluidStack.ID, CraftingPreviewElementFluidStack::fromByteBuf); API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerItems.ID, tag -> new ReaderWriterHandlerItems(tag)); + API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerRedstone.ID, tag -> new ReaderWriterHandlerRedstone()); int id = 0; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileWriter.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileWriter.java index 56bf03272..60b0f42d7 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileWriter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileWriter.java @@ -31,10 +31,10 @@ public class TileWriter extends TileNode implements IWriter, IReaderWriter { public void update() { super.update(); - if (!worldObj.isRemote && redstoneStrength != lastRedstoneStrength) { - lastRedstoneStrength = redstoneStrength; + if (!worldObj.isRemote && getRedstoneStrength() != lastRedstoneStrength) { + lastRedstoneStrength = getRedstoneStrength(); - worldObj.notifyNeighborsOfStateChange(pos, RSBlocks.WRITER); + worldObj.notifyNeighborsOfStateChange(pos, RSBlocks.WRITER); // @TODO: Does this need to happen too on orientation change? } }