From 57af1d886ab6e7fa7efa2a5cd9e1e0dae93743e6 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Thu, 2 Feb 2017 22:56:41 +0100 Subject: [PATCH] Added status messages to Reader/Writers --- .../readerwriter/IReaderWriterHandler.java | 10 +++++++ .../ReaderWriterHandlerFluids.java | 17 +++++++++++ .../ReaderWriterHandlerItems.java | 22 +++++++++++++++ .../ReaderWriterHandlerRedstone.java | 28 +++++++++++++++++-- .../refinedstorage/block/BlockReader.java | 19 +++++++++++-- .../refinedstorage/block/BlockWriter.java | 19 +++++++++++-- .../ReaderWriterHandlerForgeEnergy.java | 15 ++++++++++ .../tesla/ReaderWriterHandlerTesla.java | 16 +++++++++++ .../assets/refinedstorage/lang/en_US.lang | 2 ++ 9 files changed, 141 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IReaderWriterHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IReaderWriterHandler.java index 049c3ea5a..d05cd4e39 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IReaderWriterHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IReaderWriterHandler.java @@ -2,8 +2,11 @@ package com.raoulvdberge.refinedstorage.api.network.readerwriter; import com.raoulvdberge.refinedstorage.tile.IReaderWriter; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.text.ITextComponent; import net.minecraftforge.common.capabilities.Capability; +import java.util.List; + /** * Represents a reader writer handler. Can be for example: items, fluids, energy, ... */ @@ -48,4 +51,11 @@ public interface IReaderWriterHandler { * @return the id of this writer, as assigned to the {@link IReaderWriterHandlerRegistry} */ String getId(); + + /** + * @param readerWriter the reader writer + * @param channel the channel + * @return status line(s) displayed when right clicking a reader or writer + */ + List getStatus(IReaderWriter readerWriter, IReaderWriterChannel channel); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerFluids.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerFluids.java index dbba2baf3..4f523e040 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerFluids.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerFluids.java @@ -1,11 +1,15 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter; +import com.raoulvdberge.refinedstorage.RSUtils; 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.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.fluids.*; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; @@ -13,6 +17,8 @@ import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.IFluidTankProperties; import javax.annotation.Nullable; +import java.util.Collections; +import java.util.List; public class ReaderWriterHandlerFluids implements IReaderWriterHandler { public static final String ID = "fluids"; @@ -70,6 +76,17 @@ public class ReaderWriterHandlerFluids implements IReaderWriterHandler { return ID; } + @Override + public List getStatus(IReaderWriter readerWriter, IReaderWriterChannel channel) { + FluidStack stack = readerWriter instanceof IReader ? tankReader.getFluid() : tankWriter.getFluid(); + + if (stack == null) { + return Collections.emptyList(); + } + + return Collections.singletonList(new TextComponentString(RSUtils.QUANTITY_FORMATTER.format((float) stack.amount / 1000F) + "x ").appendSibling(new TextComponentTranslation(stack.getUnlocalizedName()))); + } + private class FluidTankReaderWriter implements IFluidTank, IFluidHandler { private FluidTank parent; private boolean canFill, canDrain; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerItems.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerItems.java index 3ef362640..0ee7e09ec 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerItems.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerItems.java @@ -8,6 +8,9 @@ import com.raoulvdberge.refinedstorage.api.network.readerwriter.IWriter; import com.raoulvdberge.refinedstorage.tile.IReaderWriter; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; @@ -15,6 +18,8 @@ import net.minecraftforge.items.ItemStackHandler; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.List; public class ReaderWriterHandlerItems implements IReaderWriterHandler { public static final String ID = "items"; @@ -72,6 +77,23 @@ public class ReaderWriterHandlerItems implements IReaderWriterHandler { return ID; } + @Override + public List getStatus(IReaderWriter readerWriter, IReaderWriterChannel channel) { + List components = new ArrayList<>(); + + IItemHandler handler = readerWriter instanceof IReader ? itemsReader : itemsWriter; + + for (int i = 0; i < handler.getSlots(); ++i) { + ItemStack stack = handler.getStackInSlot(i); + + if (!stack.isEmpty()) { + components.add(new TextComponentString(stack.getCount() + "x ").appendSibling(new TextComponentTranslation(stack.getUnlocalizedName() + ".name"))); + } + } + + return components; + } + private class ItemHandlerReaderWriter implements IItemHandler { private IItemHandler parent; private boolean canInsert, canExtract; 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 index 5f75b715c..0f08dc48e 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerRedstone.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerRedstone.java @@ -6,22 +6,33 @@ import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterHan import com.raoulvdberge.refinedstorage.api.network.readerwriter.IWriter; import com.raoulvdberge.refinedstorage.tile.IReaderWriter; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; import net.minecraftforge.common.capabilities.Capability; +import java.util.Collections; +import java.util.List; + public class ReaderWriterHandlerRedstone implements IReaderWriterHandler { public static final String ID = "redstone"; @Override public void update(IReaderWriterChannel channel) { + int strength = getStrength(channel); + + for (IWriter writer : channel.getWriters()) { + writer.setRedstoneStrength(strength); + } + } + + private int getStrength(IReaderWriterChannel channel) { int strength = 0; for (IReader reader : channel.getReaders()) { strength += reader.getRedstoneStrength(); } - for (IWriter writer : channel.getWriters()) { - writer.setRedstoneStrength(strength); - } + return strength; } @Override @@ -48,4 +59,15 @@ public class ReaderWriterHandlerRedstone implements IReaderWriterHandler { public String getId() { return ID; } + + @Override + public List getStatus(IReaderWriter readerWriter, IReaderWriterChannel channel) { + int strength = getStrength(channel); + + if (strength == 0) { + return Collections.emptyList(); + } + + return Collections.singletonList(new TextComponentTranslation("misc.refinedstorage:reader_writer.redstone", strength)); + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockReader.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockReader.java index 9aaa6e120..d7161ac34 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockReader.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockReader.java @@ -2,6 +2,8 @@ package com.raoulvdberge.refinedstorage.block; import com.raoulvdberge.refinedstorage.RSBlocks; import com.raoulvdberge.refinedstorage.RSGui; +import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterChannel; +import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeReader; import com.raoulvdberge.refinedstorage.tile.TileReader; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; @@ -14,6 +16,7 @@ import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import java.util.List; +import java.util.stream.Collectors; public class BlockReader extends BlockCable { public BlockReader() { @@ -31,8 +34,20 @@ public class BlockReader extends BlockCable { return false; } - if (!world.isRemote && tryOpenNetworkGui(RSGui.READER_WRITER, player, world, pos, side)) { - ((TileReader) world.getTileEntity(pos)).getNode().onOpened(player); + if (!world.isRemote) { + NetworkNodeReader reader = ((TileReader) world.getTileEntity(pos)).getNode(); + + if (player.isSneaking()) { + if (reader.getNetwork() != null) { + IReaderWriterChannel channel = reader.getNetwork().getReaderWriterChannel(reader.getChannel()); + + if (channel != null) { + channel.getHandlers().stream().map(h -> h.getStatus(reader, channel)).flatMap(List::stream).collect(Collectors.toList()).forEach(player::sendMessage); + } + } + } else if (tryOpenNetworkGui(RSGui.READER_WRITER, player, world, pos, side)) { + reader.onOpened(player); + } } return true; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockWriter.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockWriter.java index 4bcd1c497..ac2126454 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockWriter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockWriter.java @@ -2,7 +2,9 @@ package com.raoulvdberge.refinedstorage.block; import com.raoulvdberge.refinedstorage.RSBlocks; import com.raoulvdberge.refinedstorage.RSGui; +import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterChannel; import com.raoulvdberge.refinedstorage.api.network.readerwriter.IWriter; +import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeWriter; import com.raoulvdberge.refinedstorage.tile.TileWriter; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; @@ -15,6 +17,7 @@ import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import java.util.List; +import java.util.stream.Collectors; public class BlockWriter extends BlockCable { public BlockWriter() { @@ -32,8 +35,20 @@ public class BlockWriter extends BlockCable { return false; } - if (!world.isRemote && tryOpenNetworkGui(RSGui.READER_WRITER, player, world, pos, side)) { - ((TileWriter) world.getTileEntity(pos)).getNode().onOpened(player); + if (!world.isRemote) { + NetworkNodeWriter writer = ((TileWriter) world.getTileEntity(pos)).getNode(); + + if (player.isSneaking()) { + if (writer.getNetwork() != null) { + IReaderWriterChannel channel = writer.getNetwork().getReaderWriterChannel(writer.getChannel()); + + if (channel != null) { + channel.getHandlers().stream().map(h -> h.getStatus(writer, channel)).flatMap(List::stream).collect(Collectors.toList()).forEach(player::sendMessage); + } + } + } else if (tryOpenNetworkGui(RSGui.READER_WRITER, player, world, pos, side)) { + writer.onOpened(player); + } } return true; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/integration/forgeenergy/ReaderWriterHandlerForgeEnergy.java b/src/main/java/com/raoulvdberge/refinedstorage/integration/forgeenergy/ReaderWriterHandlerForgeEnergy.java index 75d4b359e..6d35b2a8b 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/integration/forgeenergy/ReaderWriterHandlerForgeEnergy.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/integration/forgeenergy/ReaderWriterHandlerForgeEnergy.java @@ -6,12 +6,16 @@ import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterHan import com.raoulvdberge.refinedstorage.api.network.readerwriter.IWriter; import com.raoulvdberge.refinedstorage.tile.IReaderWriter; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; 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; +import java.util.Collections; +import java.util.List; public class ReaderWriterHandlerForgeEnergy implements IReaderWriterHandler { public static final String ID = "forgeenergy"; @@ -71,6 +75,17 @@ public class ReaderWriterHandlerForgeEnergy implements IReaderWriterHandler { return ID; } + @Override + public List getStatus(IReaderWriter readerWriter, IReaderWriterChannel channel) { + IEnergyStorage storage = readerWriter instanceof IReader ? storageReader : storageWriter; + + if (storage.getEnergyStored() == 0) { + return Collections.emptyList(); + } + + return Collections.singletonList(new TextComponentString(storage.getEnergyStored() + " FE / " + storage.getMaxEnergyStored() + " FE")); + } + private class EnergyStorageReaderWriter implements IEnergyStorage { private IEnergyStorage parent; private boolean canExtract, canReceive; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/integration/tesla/ReaderWriterHandlerTesla.java b/src/main/java/com/raoulvdberge/refinedstorage/integration/tesla/ReaderWriterHandlerTesla.java index 147ef6eab..22c118412 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/integration/tesla/ReaderWriterHandlerTesla.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/integration/tesla/ReaderWriterHandlerTesla.java @@ -10,10 +10,15 @@ import net.darkhax.tesla.api.ITeslaHolder; import net.darkhax.tesla.api.ITeslaProducer; import net.darkhax.tesla.api.implementation.BaseTeslaContainer; import net.darkhax.tesla.capability.TeslaCapabilities; +import net.darkhax.tesla.lib.TeslaUtils; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; import net.minecraftforge.common.capabilities.Capability; import javax.annotation.Nullable; +import java.util.Collections; +import java.util.List; public class ReaderWriterHandlerTesla implements IReaderWriterHandler { public static final String ID = "tesla"; @@ -82,6 +87,17 @@ public class ReaderWriterHandlerTesla implements IReaderWriterHandler { return ID; } + @Override + public List getStatus(IReaderWriter readerWriter, IReaderWriterChannel channel) { + ITeslaHolder holder = readerWriter instanceof IReader ? containerReader : containerWriter; + + if (holder.getStoredPower() == 0) { + return Collections.emptyList(); + } + + return Collections.singletonList(new TextComponentString(TeslaUtils.getDisplayableTeslaCount(holder.getStoredPower()) + " / " + TeslaUtils.getDisplayableTeslaCount(holder.getCapacity()))); + } + private class TeslaContainerReader implements ITeslaHolder, ITeslaConsumer { private BaseTeslaContainer parent; diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index 15c48ddc0..f74abb5f9 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -104,6 +104,8 @@ misc.refinedstorage:priority=Priority misc.refinedstorage:oredict=Oredict misc.refinedstorage:blocking=Blocking +misc.refinedstorage:reader_writer.redstone=Redstone strength: %d + sidebutton.refinedstorage:compare.1=Compare damage sidebutton.refinedstorage:compare.2=Compare NBT sidebutton.refinedstorage:compare.8=Compare ore dictionary