Added status messages to Reader/Writers

This commit is contained in:
raoulvdberge
2017-02-02 22:56:41 +01:00
parent 17c37f5144
commit 57af1d886a
9 changed files with 141 additions and 7 deletions

View File

@@ -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<ITextComponent> getStatus(IReaderWriter readerWriter, IReaderWriterChannel channel);
}

View File

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

View File

@@ -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<ITextComponent> getStatus(IReaderWriter readerWriter, IReaderWriterChannel channel) {
List<ITextComponent> 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;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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