Redstone reader writer handler

This commit is contained in:
Raoul Van den Berge
2016-11-11 16:14:01 +01:00
parent aee42d2214
commit 729237918c
4 changed files with 79 additions and 3 deletions

View File

@@ -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> T getCapability(Capability<T> capability, @Nullable EnumFacing facing) {
return null;
}
}

View File

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

View File

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

View File

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