Reader and writer always return a dummy cap now.

This commit is contained in:
raoulvdberge
2018-06-19 15:59:30 +02:00
parent 0c19860bba
commit 2f691814f4
10 changed files with 134 additions and 73 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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()) {

View File

@@ -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()) {