Added status messages to Reader/Writers
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user