Return a dummy reader/writer cap on clients to ensure correct rendering of pipe connections for example
This commit is contained in:
@@ -3,6 +3,8 @@ package com.raoulvdberge.refinedstorage.tile;
|
||||
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.IReaderWriterHandlerFactory;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeReader;
|
||||
import com.raoulvdberge.refinedstorage.gui.GuiReaderWriter;
|
||||
import com.raoulvdberge.refinedstorage.tile.data.ITileDataConsumer;
|
||||
@@ -12,6 +14,8 @@ import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.network.datasync.DataSerializers;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraftforge.common.capabilities.Capability;
|
||||
import net.minecraftforge.fml.common.FMLCommonHandler;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
@@ -43,6 +47,18 @@ public class TileReader extends TileNode<NetworkNodeReader> {
|
||||
dataManager.addWatchedParameter(CHANNEL);
|
||||
}
|
||||
|
||||
public static <T> T getDummyCapabilityForClient(IReaderWriter readerWriter, Capability<T> capability) {
|
||||
for (IReaderWriterHandlerFactory factory : API.instance().getReaderWriterHandlerRegistry().all()) {
|
||||
T dummy = factory.create(null).getCapability(readerWriter, capability);
|
||||
|
||||
if (dummy != null) {
|
||||
return dummy;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasCapability(Capability<?> capability, @Nullable EnumFacing facing) {
|
||||
if (super.hasCapability(capability, facing)) {
|
||||
@@ -51,7 +67,15 @@ public class TileReader extends TileNode<NetworkNodeReader> {
|
||||
|
||||
IReader reader = getNode();
|
||||
|
||||
if (facing != getDirection() || reader.getNetwork() == null) {
|
||||
if (facing != getDirection()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (reader.getNetwork() == null) {
|
||||
if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) {
|
||||
return getDummyCapabilityForClient(reader, capability) != null;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -77,7 +101,15 @@ public class TileReader extends TileNode<NetworkNodeReader> {
|
||||
if (foundCapability == null) {
|
||||
IReader reader = getNode();
|
||||
|
||||
if (facing != getDirection() || reader.getNetwork() == null) {
|
||||
if (facing != getDirection()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (reader.getNetwork() == null) {
|
||||
if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) {
|
||||
return getDummyCapabilityForClient(reader, capability);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,8 @@ import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeWriter;
|
||||
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraftforge.common.capabilities.Capability;
|
||||
import net.minecraftforge.fml.common.FMLCommonHandler;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
@@ -26,7 +28,15 @@ public class TileWriter extends TileNode<NetworkNodeWriter> {
|
||||
|
||||
IWriter writer = getNode();
|
||||
|
||||
if (facing != getDirection() || writer.getNetwork() == null) {
|
||||
if (facing != getDirection()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (writer.getNetwork() == null) {
|
||||
if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) {
|
||||
return TileReader.getDummyCapabilityForClient(writer, capability) != null;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -52,7 +62,15 @@ public class TileWriter extends TileNode<NetworkNodeWriter> {
|
||||
if (foundCapability == null) {
|
||||
IWriter writer = getNode();
|
||||
|
||||
if (facing != getDirection() || writer.getNetwork() == null) {
|
||||
if (facing != getDirection()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (writer.getNetwork() == null) {
|
||||
if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) {
|
||||
return TileReader.getDummyCapabilityForClient(writer, capability);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user