Reader and writer always return a dummy cap now.
This commit is contained in:
@@ -36,5 +36,5 @@ public interface IReaderWriterChannel {
|
|||||||
*
|
*
|
||||||
* @param tag the tag to read from
|
* @param tag the tag to read from
|
||||||
*/
|
*/
|
||||||
void readFromNBT(NBTTagCompound tag);
|
void readFromNbt(NBTTagCompound tag);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,6 +53,11 @@ public interface IReaderWriterHandler {
|
|||||||
*/
|
*/
|
||||||
<T> T getCapabilityWriter(IWriter writer, Capability<T> capability);
|
<T> T getCapabilityWriter(IWriter writer, Capability<T> capability);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a dummy capability that does nothing, for use client side
|
||||||
|
*/
|
||||||
|
Object getNullCapability();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Writes this reader writer handler to NBT.
|
* Writes this reader writer handler to NBT.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ public class ReaderWriterChannel implements IReaderWriterChannel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void readFromNBT(NBTTagCompound tag) {
|
public void readFromNbt(NBTTagCompound tag) {
|
||||||
for (IReaderWriterHandler handler : handlers) {
|
for (IReaderWriterHandler handler : handlers) {
|
||||||
String id = String.format(NBT_HANDLER, handler.getId());
|
String id = String.format(NBT_HANDLER, handler.getId());
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,30 @@ import java.util.List;
|
|||||||
public class ReaderWriterHandlerFluids implements IReaderWriterHandler {
|
public class ReaderWriterHandlerFluids implements IReaderWriterHandler {
|
||||||
public static final String ID = "fluids";
|
public static final String ID = "fluids";
|
||||||
|
|
||||||
|
private static final IFluidHandler NULL_CAP = new IFluidHandler() {
|
||||||
|
@Override
|
||||||
|
public IFluidTankProperties[] getTankProperties() {
|
||||||
|
return new IFluidTankProperties[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int fill(FluidStack resource, boolean doFill) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public FluidStack drain(FluidStack resource, boolean doDrain) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public FluidStack drain(int maxDrain, boolean doDrain) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
private FluidTank tank;
|
private FluidTank tank;
|
||||||
private FluidTankReaderWriter tankReader, tankWriter;
|
private FluidTankReaderWriter tankReader, tankWriter;
|
||||||
|
|
||||||
@@ -73,6 +97,11 @@ public class ReaderWriterHandlerFluids implements IReaderWriterHandler {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getNullCapability() {
|
||||||
|
return NULL_CAP;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public NBTTagCompound writeToNbt(NBTTagCompound tag) {
|
public NBTTagCompound writeToNbt(NBTTagCompound tag) {
|
||||||
tank.writeToNBT(tag);
|
tank.writeToNBT(tag);
|
||||||
|
|||||||
@@ -23,6 +23,36 @@ import java.util.List;
|
|||||||
public class ReaderWriterHandlerItems implements IReaderWriterHandler {
|
public class ReaderWriterHandlerItems implements IReaderWriterHandler {
|
||||||
public static final String ID = "items";
|
public static final String ID = "items";
|
||||||
|
|
||||||
|
private static final IItemHandler NULL_CAP = new IItemHandler() {
|
||||||
|
@Override
|
||||||
|
public int getSlots() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
@Override
|
||||||
|
public ItemStack getStackInSlot(int slot) {
|
||||||
|
return ItemStack.EMPTY;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
@Override
|
||||||
|
public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) {
|
||||||
|
return stack;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
@Override
|
||||||
|
public ItemStack extractItem(int slot, int amount, boolean simulate) {
|
||||||
|
return ItemStack.EMPTY;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSlotLimit(int slot) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
private ItemStackHandler items;
|
private ItemStackHandler items;
|
||||||
private ItemHandlerReaderWriter itemsReader, itemsWriter;
|
private ItemHandlerReaderWriter itemsReader, itemsWriter;
|
||||||
|
|
||||||
@@ -74,6 +104,11 @@ public class ReaderWriterHandlerItems implements IReaderWriterHandler {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getNullCapability() {
|
||||||
|
return NULL_CAP;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public NBTTagCompound writeToNbt(NBTTagCompound tag) {
|
public NBTTagCompound writeToNbt(NBTTagCompound tag) {
|
||||||
StackUtils.writeItems(items, 0, tag);
|
StackUtils.writeItems(items, 0, tag);
|
||||||
|
|||||||
@@ -59,6 +59,11 @@ public class ReaderWriterHandlerRedstone implements IReaderWriterHandler {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getNullCapability() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public NBTTagCompound writeToNbt(NBTTagCompound tag) {
|
public NBTTagCompound writeToNbt(NBTTagCompound tag) {
|
||||||
return tag;
|
return tag;
|
||||||
|
|||||||
@@ -105,7 +105,7 @@ public class ReaderWriterManager implements IReaderWriterManager {
|
|||||||
|
|
||||||
IReaderWriterChannel channel = API.instance().createReaderWriterChannel(name, network);
|
IReaderWriterChannel channel = API.instance().createReaderWriterChannel(name, network);
|
||||||
|
|
||||||
channel.readFromNBT(channelTag);
|
channel.readFromNbt(channelTag);
|
||||||
|
|
||||||
channels.put(name, channel);
|
channels.put(name, channel);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,38 @@ import java.util.List;
|
|||||||
public class ReaderWriterHandlerForgeEnergy implements IReaderWriterHandler {
|
public class ReaderWriterHandlerForgeEnergy implements IReaderWriterHandler {
|
||||||
public static final String ID = "forgeenergy";
|
public static final String ID = "forgeenergy";
|
||||||
|
|
||||||
|
private static final IEnergyStorage NULL_CAP = new IEnergyStorage() {
|
||||||
|
@Override
|
||||||
|
public int receiveEnergy(int maxReceive, boolean simulate) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int extractEnergy(int maxExtract, boolean simulate) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getEnergyStored() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMaxEnergyStored() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canExtract() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canReceive() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
private static final String NBT_ENERGY_STORED = "EnergyStored";
|
private static final String NBT_ENERGY_STORED = "EnergyStored";
|
||||||
|
|
||||||
private EnergyStorage storage;
|
private EnergyStorage storage;
|
||||||
@@ -89,6 +121,11 @@ public class ReaderWriterHandlerForgeEnergy implements IReaderWriterHandler {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getNullCapability() {
|
||||||
|
return NULL_CAP;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public NBTTagCompound writeToNbt(NBTTagCompound tag) {
|
public NBTTagCompound writeToNbt(NBTTagCompound tag) {
|
||||||
tag.setInteger(NBT_ENERGY_STORED, storage.getEnergyStored());
|
tag.setInteger(NBT_ENERGY_STORED, storage.getEnergyStored());
|
||||||
|
|||||||
@@ -15,8 +15,6 @@ import net.minecraft.util.EnumFacing;
|
|||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.common.capabilities.Capability;
|
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.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
@@ -36,18 +34,6 @@ public class TileReader extends TileNode<NetworkNodeReader> {
|
|||||||
dataManager.addWatchedParameter(CHANNEL);
|
dataManager.addWatchedParameter(CHANNEL);
|
||||||
}
|
}
|
||||||
|
|
||||||
private <T> T getDummyCapabilityForClient(IReader reader, Capability<T> capability) {
|
|
||||||
for (IReaderWriterHandlerFactory factory : API.instance().getReaderWriterHandlerRegistry().all()) {
|
|
||||||
T dummy = factory.create(null).getCapabilityReader(reader, capability);
|
|
||||||
|
|
||||||
if (dummy != null) {
|
|
||||||
return dummy;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
|
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
|
||||||
if (super.hasCapability(capability, facing)) {
|
if (super.hasCapability(capability, facing)) {
|
||||||
@@ -60,22 +46,8 @@ public class TileReader extends TileNode<NetworkNodeReader> {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (reader.getNetwork() == null || !reader.canUpdate()) {
|
for (IReaderWriterHandlerFactory handlerFactory : API.instance().getReaderWriterHandlerRegistry().all()) {
|
||||||
if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) {
|
if (handlerFactory.create(null).hasCapabilityReader(reader, capability)) {
|
||||||
return getDummyCapabilityForClient(reader, capability) != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
IReaderWriterChannel channel = reader.getNetwork().getReaderWriterManager().getChannel(reader.getChannel());
|
|
||||||
|
|
||||||
if (channel == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (IReaderWriterHandler handler : channel.getHandlers()) {
|
|
||||||
if (handler.hasCapabilityReader(reader, capability)) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -94,18 +66,21 @@ public class TileReader extends TileNode<NetworkNodeReader> {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (reader.getNetwork() == null || !reader.canUpdate()) {
|
Object dummyCap = null;
|
||||||
if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) {
|
for (IReaderWriterHandlerFactory handlerFactory : API.instance().getReaderWriterHandlerRegistry().all()) {
|
||||||
return getDummyCapabilityForClient(reader, capability);
|
if (handlerFactory.create(null).hasCapabilityReader(reader, capability)) {
|
||||||
|
dummyCap = handlerFactory.create(null).getNullCapability();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
if (reader.getNetwork() == null || !reader.canUpdate()) {
|
||||||
|
return (T) dummyCap;
|
||||||
}
|
}
|
||||||
|
|
||||||
IReaderWriterChannel channel = reader.getNetwork().getReaderWriterManager().getChannel(reader.getChannel());
|
IReaderWriterChannel channel = reader.getNetwork().getReaderWriterManager().getChannel(reader.getChannel());
|
||||||
|
|
||||||
if (channel == null) {
|
if (channel == null) {
|
||||||
return null;
|
return (T) dummyCap;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (IReaderWriterHandler handler : channel.getHandlers()) {
|
for (IReaderWriterHandler handler : channel.getHandlers()) {
|
||||||
|
|||||||
@@ -11,8 +11,6 @@ import net.minecraft.util.EnumFacing;
|
|||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.common.capabilities.Capability;
|
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.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
@@ -24,18 +22,6 @@ public class TileWriter extends TileNode<NetworkNodeWriter> {
|
|||||||
dataManager.addWatchedParameter(CHANNEL);
|
dataManager.addWatchedParameter(CHANNEL);
|
||||||
}
|
}
|
||||||
|
|
||||||
private <T> T getDummyCapabilityForClient(IWriter writer, Capability<T> capability) {
|
|
||||||
for (IReaderWriterHandlerFactory factory : API.instance().getReaderWriterHandlerRegistry().all()) {
|
|
||||||
T dummy = factory.create(null).getCapabilityWriter(writer, capability);
|
|
||||||
|
|
||||||
if (dummy != null) {
|
|
||||||
return dummy;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
|
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
|
||||||
if (super.hasCapability(capability, facing)) {
|
if (super.hasCapability(capability, facing)) {
|
||||||
@@ -48,22 +34,8 @@ public class TileWriter extends TileNode<NetworkNodeWriter> {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (writer.getNetwork() == null || !writer.canUpdate()) {
|
for (IReaderWriterHandlerFactory handlerFactory : API.instance().getReaderWriterHandlerRegistry().all()) {
|
||||||
if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) {
|
if (handlerFactory.create(null).hasCapabilityWriter(writer, capability)) {
|
||||||
return getDummyCapabilityForClient(writer, capability) != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
IReaderWriterChannel channel = writer.getNetwork().getReaderWriterManager().getChannel(writer.getChannel());
|
|
||||||
|
|
||||||
if (channel == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (IReaderWriterHandler handler : channel.getHandlers()) {
|
|
||||||
if (handler.hasCapabilityWriter(writer, capability)) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -82,18 +54,21 @@ public class TileWriter extends TileNode<NetworkNodeWriter> {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (writer.getNetwork() == null || !writer.canUpdate()) {
|
Object dummyCap = null;
|
||||||
if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) {
|
for (IReaderWriterHandlerFactory handlerFactory : API.instance().getReaderWriterHandlerRegistry().all()) {
|
||||||
return getDummyCapabilityForClient(writer, capability);
|
if (handlerFactory.create(null).hasCapabilityWriter(writer, capability)) {
|
||||||
|
dummyCap = handlerFactory.create(null).getNullCapability();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
if (writer.getNetwork() == null || !writer.canUpdate()) {
|
||||||
|
return (T) dummyCap;
|
||||||
}
|
}
|
||||||
|
|
||||||
IReaderWriterChannel channel = writer.getNetwork().getReaderWriterManager().getChannel(writer.getChannel());
|
IReaderWriterChannel channel = writer.getNetwork().getReaderWriterManager().getChannel(writer.getChannel());
|
||||||
|
|
||||||
if (channel == null) {
|
if (channel == null) {
|
||||||
return null;
|
return (T) dummyCap;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (IReaderWriterHandler handler : channel.getHandlers()) {
|
for (IReaderWriterHandler handler : channel.getHandlers()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user