Alright, I have a functioning measure command! Some of the previous forum posts were very helpful in understanding capabilities, but there's still a few things I'm not quite clear on.
Particularly in my Provider:
public class MeasurementProvider implements ICapabilityProvider {
@CapabilityInject(IMeasurement.class)
public static final Capability<IMeasurement> MEASUREMENT_CAPABILITY = null;
private final LazyOptional<IMeasurement> instance = LazyOptional.of(Measurement::new);
@Nonnull
@Override
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) {
return cap == MEASUREMENT_CAPABILITY ? instance.cast() : LazyOptional.empty();
}
}
This is mostly based on others code examples, and it does work. What I don't understand is how getCapability() is working. You pass it a Nonnull Capability "cap", and then compare that to MEASUREMENT_CAPABILITY, which is null. Further, this is how I'm calling getCapability (in part):
getCapability(MeasurementProvider.MEASUREMENT_CAPABILITY, null)
Isn't this passing a Null argument to what should be a Nonnull parameter?
Maybe this just displays a lack of Java knowledge on my part, in which case I'll keep looking into it myself, but if there's something about the capability system I'm missing I would appreciate any help. Thanks!