mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2024-12-14 04:00:30 +00:00
Make capability invalidation callbacks less strict
Forge!! *shakes fist*.
This commit is contained in:
parent
306e06a79a
commit
9d44f1ca66
@ -38,13 +38,13 @@ public final class Peripherals
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static IPeripheral getPeripheral( World world, BlockPos pos, Direction side, NonNullConsumer<LazyOptional<IPeripheral>> invalidate )
|
||||
public static IPeripheral getPeripheral( World world, BlockPos pos, Direction side, NonNullConsumer<Object> invalidate )
|
||||
{
|
||||
return World.isInWorldBounds( pos ) && !world.isClientSide ? getPeripheralAt( world, pos, side, invalidate ) : null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static IPeripheral getPeripheralAt( World world, BlockPos pos, Direction side, NonNullConsumer<LazyOptional<IPeripheral>> invalidate )
|
||||
private static IPeripheral getPeripheralAt( World world, BlockPos pos, Direction side, NonNullConsumer<? super Object> invalidate )
|
||||
{
|
||||
TileEntity block = world.getBlockEntity( pos );
|
||||
if( block != null )
|
||||
|
@ -39,7 +39,6 @@ import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.StringTextComponent;
|
||||
import net.minecraft.util.text.TranslationTextComponent;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.LazyOptional;
|
||||
import net.minecraftforge.common.util.NonNullConsumer;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
@ -58,7 +57,7 @@ public abstract class TileComputerBase extends TileGeneric implements IComputerT
|
||||
private boolean on = false;
|
||||
boolean startOn = false;
|
||||
private boolean fresh = false;
|
||||
private final NonNullConsumer<LazyOptional<IPeripheral>>[] invalidate;
|
||||
private final NonNullConsumer<Object>[] invalidate;
|
||||
|
||||
private final ComputerFamily family;
|
||||
|
||||
@ -69,7 +68,7 @@ public abstract class TileComputerBase extends TileGeneric implements IComputerT
|
||||
|
||||
// We cache these so we can guarantee we only ever register one listener for adjacent capabilities.
|
||||
@SuppressWarnings( { "unchecked", "rawtypes" } )
|
||||
NonNullConsumer<LazyOptional<IPeripheral>>[] invalidate = this.invalidate = new NonNullConsumer[6];
|
||||
NonNullConsumer<Object>[] invalidate = this.invalidate = new NonNullConsumer[6];
|
||||
for( Direction direction : Direction.values() )
|
||||
{
|
||||
invalidate[direction.ordinal()] = o -> updateInput( direction );
|
||||
|
@ -9,6 +9,7 @@ import dan200.computercraft.api.peripheral.IPeripheral;
|
||||
import dan200.computercraft.api.peripheral.PeripheralType;
|
||||
import dan200.computercraft.core.asm.NamedMethod;
|
||||
import dan200.computercraft.core.asm.PeripheralMethod;
|
||||
import dan200.computercraft.shared.util.CapabilityUtil;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
@ -34,7 +35,7 @@ public class GenericPeripheralProvider
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static IPeripheral getPeripheral( @Nonnull World world, @Nonnull BlockPos pos, @Nonnull Direction side, NonNullConsumer<LazyOptional<IPeripheral>> invalidate )
|
||||
public static IPeripheral getPeripheral( @Nonnull World world, @Nonnull BlockPos pos, @Nonnull Direction side, NonNullConsumer<Object> invalidate )
|
||||
{
|
||||
TileEntity tile = world.getBlockEntity( pos );
|
||||
if( tile == null ) return null;
|
||||
@ -52,7 +53,7 @@ public class GenericPeripheralProvider
|
||||
if( capabilityMethods.isEmpty() ) return;
|
||||
|
||||
saturated.addMethods( contents, capabilityMethods );
|
||||
wrapper.addListener( cast( invalidate ) );
|
||||
CapabilityUtil.addListener( wrapper, invalidate );
|
||||
} );
|
||||
}
|
||||
|
||||
@ -91,10 +92,4 @@ public class GenericPeripheralProvider
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings( { "unchecked", "rawtypes" } )
|
||||
private static <T> NonNullConsumer<T> cast( NonNullConsumer<?> consumer )
|
||||
{
|
||||
return (NonNullConsumer) consumer;
|
||||
}
|
||||
}
|
||||
|
@ -15,7 +15,6 @@ import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.Constants;
|
||||
import net.minecraftforge.common.util.LazyOptional;
|
||||
import net.minecraftforge.common.util.NonNullConsumer;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
@ -38,7 +37,7 @@ public final class WiredModemLocalPeripheral
|
||||
private String type;
|
||||
|
||||
private IPeripheral peripheral;
|
||||
private final NonNullConsumer<LazyOptional<IPeripheral>> invalidate;
|
||||
private final NonNullConsumer<Object> invalidate;
|
||||
|
||||
public WiredModemLocalPeripheral( @Nonnull Runnable invalidate )
|
||||
{
|
||||
|
@ -35,12 +35,20 @@ public final class CapabilityUtil
|
||||
}
|
||||
}
|
||||
|
||||
public static <T> void addListener( LazyOptional<T> p, NonNullConsumer<? super LazyOptional<T>> invalidate )
|
||||
{
|
||||
// We can make this safe with invalidate::accept, but then we're allocating it's just kind of absurd.
|
||||
@SuppressWarnings( "unchecked" )
|
||||
NonNullConsumer<LazyOptional<T>> safeInvalidate = (NonNullConsumer<LazyOptional<T>>) invalidate;
|
||||
p.addListener( safeInvalidate );
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static <T> T unwrap( LazyOptional<T> p, NonNullConsumer<LazyOptional<T>> invalidate )
|
||||
public static <T> T unwrap( LazyOptional<T> p, NonNullConsumer<? super LazyOptional<T>> invalidate )
|
||||
{
|
||||
if( !p.isPresent() ) return null;
|
||||
|
||||
p.addListener( invalidate );
|
||||
addListener( p, invalidate );
|
||||
return p.orElseThrow( NullPointerException::new );
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user