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
|
||||
*/
|
||||
void readFromNBT(NBTTagCompound tag);
|
||||
void readFromNbt(NBTTagCompound tag);
|
||||
}
|
||||
|
||||
@@ -53,6 +53,11 @@ public interface IReaderWriterHandler {
|
||||
*/
|
||||
<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.
|
||||
*
|
||||
|
||||
@@ -54,7 +54,7 @@ public class ReaderWriterChannel implements IReaderWriterChannel {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound tag) {
|
||||
public void readFromNbt(NBTTagCompound tag) {
|
||||
for (IReaderWriterHandler handler : handlers) {
|
||||
String id = String.format(NBT_HANDLER, handler.getId());
|
||||
|
||||
|
||||
@@ -22,6 +22,30 @@ import java.util.List;
|
||||
public class ReaderWriterHandlerFluids implements IReaderWriterHandler {
|
||||
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 FluidTankReaderWriter tankReader, tankWriter;
|
||||
|
||||
@@ -73,6 +97,11 @@ public class ReaderWriterHandlerFluids implements IReaderWriterHandler {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getNullCapability() {
|
||||
return NULL_CAP;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NBTTagCompound writeToNbt(NBTTagCompound tag) {
|
||||
tank.writeToNBT(tag);
|
||||
|
||||
@@ -23,6 +23,36 @@ import java.util.List;
|
||||
public class ReaderWriterHandlerItems implements IReaderWriterHandler {
|
||||
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 ItemHandlerReaderWriter itemsReader, itemsWriter;
|
||||
|
||||
@@ -74,6 +104,11 @@ public class ReaderWriterHandlerItems implements IReaderWriterHandler {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getNullCapability() {
|
||||
return NULL_CAP;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NBTTagCompound writeToNbt(NBTTagCompound tag) {
|
||||
StackUtils.writeItems(items, 0, tag);
|
||||
|
||||
@@ -59,6 +59,11 @@ public class ReaderWriterHandlerRedstone implements IReaderWriterHandler {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getNullCapability() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NBTTagCompound writeToNbt(NBTTagCompound tag) {
|
||||
return tag;
|
||||
|
||||
@@ -105,7 +105,7 @@ public class ReaderWriterManager implements IReaderWriterManager {
|
||||
|
||||
IReaderWriterChannel channel = API.instance().createReaderWriterChannel(name, network);
|
||||
|
||||
channel.readFromNBT(channelTag);
|
||||
channel.readFromNbt(channelTag);
|
||||
|
||||
channels.put(name, channel);
|
||||
}
|
||||
|
||||
@@ -20,6 +20,38 @@ import java.util.List;
|
||||
public class ReaderWriterHandlerForgeEnergy implements IReaderWriterHandler {
|
||||
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 EnergyStorage storage;
|
||||
@@ -89,6 +121,11 @@ public class ReaderWriterHandlerForgeEnergy implements IReaderWriterHandler {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getNullCapability() {
|
||||
return NULL_CAP;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NBTTagCompound writeToNbt(NBTTagCompound tag) {
|
||||
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.world.World;
|
||||
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;
|
||||
@@ -36,18 +34,6 @@ public class TileReader extends TileNode<NetworkNodeReader> {
|
||||
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
|
||||
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
|
||||
if (super.hasCapability(capability, facing)) {
|
||||
@@ -60,22 +46,8 @@ public class TileReader extends TileNode<NetworkNodeReader> {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (reader.getNetwork() == null || !reader.canUpdate()) {
|
||||
if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) {
|
||||
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)) {
|
||||
for (IReaderWriterHandlerFactory handlerFactory : API.instance().getReaderWriterHandlerRegistry().all()) {
|
||||
if (handlerFactory.create(null).hasCapabilityReader(reader, capability)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -94,18 +66,21 @@ public class TileReader extends TileNode<NetworkNodeReader> {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (reader.getNetwork() == null || !reader.canUpdate()) {
|
||||
if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) {
|
||||
return getDummyCapabilityForClient(reader, capability);
|
||||
Object dummyCap = null;
|
||||
for (IReaderWriterHandlerFactory handlerFactory : API.instance().getReaderWriterHandlerRegistry().all()) {
|
||||
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());
|
||||
|
||||
if (channel == null) {
|
||||
return null;
|
||||
return (T) dummyCap;
|
||||
}
|
||||
|
||||
for (IReaderWriterHandler handler : channel.getHandlers()) {
|
||||
|
||||
@@ -11,8 +11,6 @@ import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
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;
|
||||
@@ -24,18 +22,6 @@ public class TileWriter extends TileNode<NetworkNodeWriter> {
|
||||
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
|
||||
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
|
||||
if (super.hasCapability(capability, facing)) {
|
||||
@@ -48,22 +34,8 @@ public class TileWriter extends TileNode<NetworkNodeWriter> {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (writer.getNetwork() == null || !writer.canUpdate()) {
|
||||
if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) {
|
||||
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)) {
|
||||
for (IReaderWriterHandlerFactory handlerFactory : API.instance().getReaderWriterHandlerRegistry().all()) {
|
||||
if (handlerFactory.create(null).hasCapabilityWriter(writer, capability)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -82,18 +54,21 @@ public class TileWriter extends TileNode<NetworkNodeWriter> {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (writer.getNetwork() == null || !writer.canUpdate()) {
|
||||
if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) {
|
||||
return getDummyCapabilityForClient(writer, capability);
|
||||
Object dummyCap = null;
|
||||
for (IReaderWriterHandlerFactory handlerFactory : API.instance().getReaderWriterHandlerRegistry().all()) {
|
||||
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());
|
||||
|
||||
if (channel == null) {
|
||||
return null;
|
||||
return (T) dummyCap;
|
||||
}
|
||||
|
||||
for (IReaderWriterHandler handler : channel.getHandlers()) {
|
||||
|
||||
Reference in New Issue
Block a user