mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-01-27 09:24:47 +00:00
parent
36878e75b7
commit
043d5f00ca
@ -16,7 +16,6 @@ import dan200.computercraft.api.media.IMediaProvider;
|
|||||||
import dan200.computercraft.api.network.IPacketNetwork;
|
import dan200.computercraft.api.network.IPacketNetwork;
|
||||||
import dan200.computercraft.api.network.wired.IWiredElement;
|
import dan200.computercraft.api.network.wired.IWiredElement;
|
||||||
import dan200.computercraft.api.network.wired.IWiredNode;
|
import dan200.computercraft.api.network.wired.IWiredNode;
|
||||||
import dan200.computercraft.api.network.wired.IWiredProvider;
|
|
||||||
import dan200.computercraft.api.peripheral.IPeripheral;
|
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||||
import dan200.computercraft.api.peripheral.IPeripheralProvider;
|
import dan200.computercraft.api.peripheral.IPeripheralProvider;
|
||||||
import dan200.computercraft.api.permissions.ITurtlePermissionProvider;
|
import dan200.computercraft.api.permissions.ITurtlePermissionProvider;
|
||||||
@ -61,6 +60,7 @@ import dan200.computercraft.shared.turtle.blocks.BlockTurtle;
|
|||||||
import dan200.computercraft.shared.turtle.blocks.TileTurtle;
|
import dan200.computercraft.shared.turtle.blocks.TileTurtle;
|
||||||
import dan200.computercraft.shared.turtle.upgrades.*;
|
import dan200.computercraft.shared.turtle.upgrades.*;
|
||||||
import dan200.computercraft.shared.util.*;
|
import dan200.computercraft.shared.util.*;
|
||||||
|
import dan200.computercraft.shared.wired.CapabilityWiredElement;
|
||||||
import dan200.computercraft.shared.wired.WiredNode;
|
import dan200.computercraft.shared.wired.WiredNode;
|
||||||
import io.netty.buffer.Unpooled;
|
import io.netty.buffer.Unpooled;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
@ -69,6 +69,7 @@ import net.minecraft.entity.player.EntityPlayerMP;
|
|||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.network.PacketBuffer;
|
import net.minecraft.network.PacketBuffer;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.EnumHand;
|
import net.minecraft.util.EnumHand;
|
||||||
import net.minecraft.util.NonNullList;
|
import net.minecraft.util.NonNullList;
|
||||||
@ -266,7 +267,6 @@ public class ComputerCraft
|
|||||||
private static List<ITurtlePermissionProvider> permissionProviders = new ArrayList<>();
|
private static List<ITurtlePermissionProvider> permissionProviders = new ArrayList<>();
|
||||||
private static final Map<String, IPocketUpgrade> pocketUpgrades = new HashMap<>();
|
private static final Map<String, IPocketUpgrade> pocketUpgrades = new HashMap<>();
|
||||||
private static final Set<ILuaAPIFactory> apiFactories = new LinkedHashSet<>();
|
private static final Set<ILuaAPIFactory> apiFactories = new LinkedHashSet<>();
|
||||||
private static final Set<IWiredProvider> wiredProviders = new LinkedHashSet<>();
|
|
||||||
|
|
||||||
// Implementation
|
// Implementation
|
||||||
@Mod.Instance( value = ComputerCraft.MOD_ID )
|
@Mod.Instance( value = ComputerCraft.MOD_ID )
|
||||||
@ -733,11 +733,6 @@ public class ComputerCraft
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void registerWiredProvider( IWiredProvider provider )
|
|
||||||
{
|
|
||||||
if( provider != null ) wiredProviders.add( provider );
|
|
||||||
}
|
|
||||||
|
|
||||||
public static IWiredNode createWiredNodeForElement( IWiredElement element )
|
public static IWiredNode createWiredNodeForElement( IWiredElement element )
|
||||||
{
|
{
|
||||||
return new WiredNode( element );
|
return new WiredNode( element );
|
||||||
@ -766,20 +761,10 @@ public class ComputerCraft
|
|||||||
|
|
||||||
public static IWiredElement getWiredElementAt( IBlockAccess world, BlockPos pos, EnumFacing side )
|
public static IWiredElement getWiredElementAt( IBlockAccess world, BlockPos pos, EnumFacing side )
|
||||||
{
|
{
|
||||||
// Try the handlers in order:
|
TileEntity tile = world.getTileEntity( pos );
|
||||||
for( IWiredProvider provider : wiredProviders )
|
return tile != null && tile.hasCapability( CapabilityWiredElement.CAPABILITY, side )
|
||||||
{
|
? tile.getCapability( CapabilityWiredElement.CAPABILITY, side )
|
||||||
try
|
: null;
|
||||||
{
|
|
||||||
IWiredElement element = provider.getElement( world, pos, side );
|
|
||||||
if( element != null ) return element;
|
|
||||||
}
|
|
||||||
catch( Exception e )
|
|
||||||
{
|
|
||||||
ComputerCraft.log.error( "Wired element provider " + provider + " errored.", e );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getDefaultBundledRedstoneOutput( World world, BlockPos pos, EnumFacing side )
|
public static int getDefaultBundledRedstoneOutput( World world, BlockPos pos, EnumFacing side )
|
||||||
|
@ -14,7 +14,6 @@ import dan200.computercraft.api.media.IMediaProvider;
|
|||||||
import dan200.computercraft.api.network.IPacketNetwork;
|
import dan200.computercraft.api.network.IPacketNetwork;
|
||||||
import dan200.computercraft.api.network.wired.IWiredElement;
|
import dan200.computercraft.api.network.wired.IWiredElement;
|
||||||
import dan200.computercraft.api.network.wired.IWiredNode;
|
import dan200.computercraft.api.network.wired.IWiredNode;
|
||||||
import dan200.computercraft.api.network.wired.IWiredProvider;
|
|
||||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||||
import dan200.computercraft.api.peripheral.IPeripheral;
|
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||||
import dan200.computercraft.api.peripheral.IPeripheralProvider;
|
import dan200.computercraft.api.peripheral.IPeripheralProvider;
|
||||||
@ -332,26 +331,6 @@ public final class ComputerCraftAPI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Registers a peripheral handler to convert blocks into {@link IPeripheral} implementations.
|
|
||||||
*
|
|
||||||
* @param handler The peripheral provider to register.
|
|
||||||
* @see dan200.computercraft.api.peripheral.IPeripheral
|
|
||||||
* @see dan200.computercraft.api.peripheral.IPeripheralProvider
|
|
||||||
*/
|
|
||||||
public static void registerWiredProvider( @Nonnull IWiredProvider handler )
|
|
||||||
{
|
|
||||||
findCC();
|
|
||||||
if ( computerCraft_registerWiredProvider != null)
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
computerCraft_registerWiredProvider.invoke( null, handler );
|
|
||||||
} catch (Exception e){
|
|
||||||
// It failed
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct a new wired node for a given wired element
|
* Construct a new wired node for a given wired element
|
||||||
*
|
*
|
||||||
@ -453,9 +432,6 @@ public final class ComputerCraftAPI
|
|||||||
computerCraft_registerAPIFactory = findCCMethod( "registerAPIFactory", new Class<?>[] {
|
computerCraft_registerAPIFactory = findCCMethod( "registerAPIFactory", new Class<?>[] {
|
||||||
ILuaAPIFactory.class
|
ILuaAPIFactory.class
|
||||||
} );
|
} );
|
||||||
computerCraft_registerWiredProvider = findCCMethod( "registerWiredProvider", new Class<?>[] {
|
|
||||||
IWiredProvider.class
|
|
||||||
} );
|
|
||||||
computerCraft_createWiredNodeForElement = findCCMethod( "createWiredNodeForElement", new Class<?>[] {
|
computerCraft_createWiredNodeForElement = findCCMethod( "createWiredNodeForElement", new Class<?>[] {
|
||||||
IWiredElement.class
|
IWiredElement.class
|
||||||
} );
|
} );
|
||||||
@ -499,7 +475,6 @@ public final class ComputerCraftAPI
|
|||||||
private static Method computerCraft_registerPocketUpgrade = null;
|
private static Method computerCraft_registerPocketUpgrade = null;
|
||||||
private static Method computerCraft_getWirelessNetwork = null;
|
private static Method computerCraft_getWirelessNetwork = null;
|
||||||
private static Method computerCraft_registerAPIFactory = null;
|
private static Method computerCraft_registerAPIFactory = null;
|
||||||
private static Method computerCraft_registerWiredProvider = null;
|
|
||||||
private static Method computerCraft_createWiredNodeForElement = null;
|
private static Method computerCraft_createWiredNodeForElement = null;
|
||||||
private static Method computerCraft_getWiredElementAt = null;
|
private static Method computerCraft_getWiredElementAt = null;
|
||||||
}
|
}
|
||||||
|
@ -14,12 +14,8 @@ import java.util.Map;
|
|||||||
* as a proxy for all network objects. Whilst the node may change networks, an element's node should remain constant
|
* as a proxy for all network objects. Whilst the node may change networks, an element's node should remain constant
|
||||||
* for its lifespan.
|
* for its lifespan.
|
||||||
*
|
*
|
||||||
* Elements are generally tied to a block or tile entity in world. One should either register an {@link IWiredProvider}
|
* Elements are generally tied to a block or tile entity in world. In such as case, one should provide the
|
||||||
* or implement {@link IWiredElementTile} on your tile entity.
|
* {@link IWiredElement} capability for the appropriate sides.
|
||||||
*
|
|
||||||
* @see IWiredProvider
|
|
||||||
* @see ComputerCraftAPI#registerWiredProvider(IWiredProvider)
|
|
||||||
* @see IWiredElementTile
|
|
||||||
*/
|
*/
|
||||||
public interface IWiredElement extends IWiredSender
|
public interface IWiredElement extends IWiredSender
|
||||||
{
|
{
|
||||||
|
@ -1,22 +0,0 @@
|
|||||||
package dan200.computercraft.api.network.wired;
|
|
||||||
|
|
||||||
import net.minecraft.util.EnumFacing;
|
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A {@link net.minecraft.tileentity.TileEntity} which provides a {@link IWiredElement}. This acts
|
|
||||||
* as a simpler alternative to a full-blown {@link IWiredProvider}.
|
|
||||||
*/
|
|
||||||
public interface IWiredElementTile
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Get the wired element of this tile for a given side.
|
|
||||||
*
|
|
||||||
* @param side The side to get the network element from.
|
|
||||||
* @return A network element, or {@code null} if there is no element here.
|
|
||||||
*/
|
|
||||||
@Nullable
|
|
||||||
IWiredElement getWiredElement( @Nonnull EnumFacing side );
|
|
||||||
}
|
|
@ -1,29 +0,0 @@
|
|||||||
package dan200.computercraft.api.network.wired;
|
|
||||||
|
|
||||||
import net.minecraft.util.EnumFacing;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
|
||||||
import net.minecraft.world.IBlockAccess;
|
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fetch or create an {@link IWiredElement} for a block at a given position.
|
|
||||||
*
|
|
||||||
* @see dan200.computercraft.api.ComputerCraftAPI#registerWiredProvider(IWiredProvider)
|
|
||||||
* @see IWiredElementTile
|
|
||||||
*/
|
|
||||||
@FunctionalInterface
|
|
||||||
public interface IWiredProvider
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Extract a wired network element from a block location.
|
|
||||||
*
|
|
||||||
* @param world The world the block is in.
|
|
||||||
* @param pos The position the block is at.
|
|
||||||
* @param side The side to get the network element from.
|
|
||||||
* @return A network element, or {@code null} if there is not an element here you'd like to handle.
|
|
||||||
*/
|
|
||||||
@Nullable
|
|
||||||
IWiredElement getElement( @Nonnull IBlockAccess world, @Nonnull BlockPos pos, @Nonnull EnumFacing side );
|
|
||||||
}
|
|
@ -18,7 +18,7 @@ import dan200.computercraft.shared.peripheral.common.BlockCableModemVariant;
|
|||||||
import dan200.computercraft.shared.peripheral.common.PeripheralItemFactory;
|
import dan200.computercraft.shared.peripheral.common.PeripheralItemFactory;
|
||||||
import dan200.computercraft.shared.util.IDAssigner;
|
import dan200.computercraft.shared.util.IDAssigner;
|
||||||
import dan200.computercraft.shared.util.PeripheralUtil;
|
import dan200.computercraft.shared.util.PeripheralUtil;
|
||||||
import dan200.computercraft.api.network.wired.IWiredElementTile;
|
import dan200.computercraft.shared.wired.CapabilityWiredElement;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
@ -31,6 +31,7 @@ import net.minecraft.util.math.BlockPos;
|
|||||||
import net.minecraft.util.math.Vec3d;
|
import net.minecraft.util.math.Vec3d;
|
||||||
import net.minecraft.util.text.TextComponentTranslation;
|
import net.minecraft.util.text.TextComponentTranslation;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.common.capabilities.Capability;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
@ -39,7 +40,7 @@ import java.util.Collections;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class TileCable extends TileModemBase implements IWiredElementTile
|
public class TileCable extends TileModemBase
|
||||||
{
|
{
|
||||||
public static final double MIN = 0.375;
|
public static final double MIN = 0.375;
|
||||||
public static final double MAX = 1 - MIN;
|
public static final double MAX = 1 - MIN;
|
||||||
@ -488,9 +489,10 @@ public class TileCable extends TileModemBase implements IWiredElementTile
|
|||||||
BlockPos current = getPos();
|
BlockPos current = getPos();
|
||||||
for( EnumFacing facing : EnumFacing.VALUES )
|
for( EnumFacing facing : EnumFacing.VALUES )
|
||||||
{
|
{
|
||||||
if( !world.isBlockLoaded( pos ) ) continue;
|
BlockPos offset = current.offset( facing );
|
||||||
|
if( !world.isBlockLoaded( offset ) ) continue;
|
||||||
IWiredElement element = ComputerCraft.getWiredElementAt( world, current.offset( facing ), facing.getOpposite() );
|
|
||||||
|
IWiredElement element = ComputerCraft.getWiredElementAt( world, offset, facing.getOpposite() );
|
||||||
if( element == null ) continue;
|
if( element == null ) continue;
|
||||||
|
|
||||||
if( BlockCable.canConnectIn( state, facing ) )
|
if( BlockCable.canConnectIn( state, facing ) )
|
||||||
@ -597,13 +599,25 @@ public class TileCable extends TileModemBase implements IWiredElementTile
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// IWiredElement tile
|
// IWiredElement capability
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasCapability( @Nonnull Capability<?> capability, @Nullable EnumFacing facing )
|
||||||
|
{
|
||||||
|
if( capability == CapabilityWiredElement.CAPABILITY ) return BlockCable.canConnectIn( getBlockState(), facing );
|
||||||
|
return super.hasCapability( capability, facing );
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public IWiredElement getWiredElement( @Nonnull EnumFacing side )
|
public <T> T getCapability( @Nonnull Capability<T> capability, @Nullable EnumFacing facing )
|
||||||
{
|
{
|
||||||
return BlockCable.canConnectIn( getBlockState(), side ) ? m_cable : null;
|
if( capability == CapabilityWiredElement.CAPABILITY )
|
||||||
|
{
|
||||||
|
return BlockCable.canConnectIn( getBlockState(), facing ) ? CapabilityWiredElement.CAPABILITY.cast( m_cable ) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.getCapability( capability, facing );
|
||||||
}
|
}
|
||||||
|
|
||||||
// IPeripheralTile
|
// IPeripheralTile
|
||||||
|
@ -9,12 +9,12 @@ package dan200.computercraft.shared.peripheral.modem;
|
|||||||
import com.google.common.base.Objects;
|
import com.google.common.base.Objects;
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.ComputerCraft;
|
||||||
import dan200.computercraft.api.network.wired.IWiredElement;
|
import dan200.computercraft.api.network.wired.IWiredElement;
|
||||||
import dan200.computercraft.api.network.wired.IWiredElementTile;
|
|
||||||
import dan200.computercraft.api.network.wired.IWiredNode;
|
import dan200.computercraft.api.network.wired.IWiredNode;
|
||||||
import dan200.computercraft.api.peripheral.IPeripheral;
|
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||||
import dan200.computercraft.shared.peripheral.common.BlockCable;
|
import dan200.computercraft.shared.peripheral.common.BlockCable;
|
||||||
import dan200.computercraft.shared.peripheral.common.TilePeripheralBase;
|
import dan200.computercraft.shared.peripheral.common.TilePeripheralBase;
|
||||||
import dan200.computercraft.shared.util.IDAssigner;
|
import dan200.computercraft.shared.util.IDAssigner;
|
||||||
|
import dan200.computercraft.shared.wired.CapabilityWiredElement;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
@ -23,13 +23,15 @@ import net.minecraft.util.math.BlockPos;
|
|||||||
import net.minecraft.util.math.Vec3d;
|
import net.minecraft.util.math.Vec3d;
|
||||||
import net.minecraft.util.text.TextComponentTranslation;
|
import net.minecraft.util.text.TextComponentTranslation;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.common.capabilities.Capability;
|
||||||
import net.minecraftforge.common.util.Constants;
|
import net.minecraftforge.common.util.Constants;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public class TileWiredModemFull extends TilePeripheralBase implements IWiredElementTile
|
public class TileWiredModemFull extends TilePeripheralBase
|
||||||
{
|
{
|
||||||
private static class FullElement extends WiredModemElement
|
private static class FullElement extends WiredModemElement
|
||||||
{
|
{
|
||||||
@ -310,9 +312,10 @@ public class TileWiredModemFull extends TilePeripheralBase implements IWiredElem
|
|||||||
BlockPos current = getPos();
|
BlockPos current = getPos();
|
||||||
for( EnumFacing facing : EnumFacing.VALUES )
|
for( EnumFacing facing : EnumFacing.VALUES )
|
||||||
{
|
{
|
||||||
if( !world.isBlockLoaded( pos ) ) continue;
|
BlockPos offset = current.offset( facing );
|
||||||
|
if( !world.isBlockLoaded( offset ) ) continue;
|
||||||
|
|
||||||
IWiredElement element = ComputerCraft.getWiredElementAt( world, current.offset( facing ), facing.getOpposite() );
|
IWiredElement element = ComputerCraft.getWiredElementAt( world, offset, facing.getOpposite() );
|
||||||
if( element == null ) continue;
|
if( element == null ) continue;
|
||||||
|
|
||||||
// If we can connect to it then do so
|
// If we can connect to it then do so
|
||||||
@ -385,11 +388,22 @@ public class TileWiredModemFull extends TilePeripheralBase implements IWiredElem
|
|||||||
|
|
||||||
// IWiredElementTile
|
// IWiredElementTile
|
||||||
|
|
||||||
@Nonnull
|
|
||||||
@Override
|
@Override
|
||||||
public IWiredElement getWiredElement( @Nonnull EnumFacing side )
|
public boolean hasCapability( @Nonnull Capability<?> capability, @Nullable EnumFacing facing )
|
||||||
{
|
{
|
||||||
return m_element;
|
return capability == CapabilityWiredElement.CAPABILITY || super.hasCapability( capability, facing );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public <T> T getCapability( @Nonnull Capability<T> capability, @Nullable EnumFacing facing )
|
||||||
|
{
|
||||||
|
if( capability == CapabilityWiredElement.CAPABILITY )
|
||||||
|
{
|
||||||
|
return CapabilityWiredElement.CAPABILITY.cast( m_element );
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.getCapability( capability, facing );
|
||||||
}
|
}
|
||||||
|
|
||||||
// IPeripheralTile
|
// IPeripheralTile
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package dan200.computercraft.shared.peripheral.modem;
|
package dan200.computercraft.shared.peripheral.modem;
|
||||||
|
|
||||||
import dan200.computercraft.api.network.wired.IWiredNetworkChange;
|
|
||||||
import dan200.computercraft.api.network.wired.IWiredElement;
|
import dan200.computercraft.api.network.wired.IWiredElement;
|
||||||
|
import dan200.computercraft.api.network.wired.IWiredNetworkChange;
|
||||||
import dan200.computercraft.api.network.wired.IWiredNode;
|
import dan200.computercraft.api.network.wired.IWiredNode;
|
||||||
import dan200.computercraft.api.peripheral.IPeripheral;
|
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||||
import dan200.computercraft.shared.wired.WiredNode;
|
import dan200.computercraft.shared.wired.WiredNode;
|
||||||
|
@ -49,7 +49,7 @@ import dan200.computercraft.shared.pocket.recipes.PocketComputerUpgradeRecipe;
|
|||||||
import dan200.computercraft.shared.turtle.blocks.TileTurtle;
|
import dan200.computercraft.shared.turtle.blocks.TileTurtle;
|
||||||
import dan200.computercraft.shared.turtle.inventory.ContainerTurtle;
|
import dan200.computercraft.shared.turtle.inventory.ContainerTurtle;
|
||||||
import dan200.computercraft.shared.util.*;
|
import dan200.computercraft.shared.util.*;
|
||||||
import dan200.computercraft.shared.wired.DefaultWiredProvider;
|
import dan200.computercraft.shared.wired.CapabilityWiredElement;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.creativetab.CreativeTabs;
|
import net.minecraft.creativetab.CreativeTabs;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
@ -485,7 +485,7 @@ public abstract class ComputerCraftProxyCommon implements IComputerCraftProxy
|
|||||||
ComputerCraftAPI.registerMediaProvider( new DefaultMediaProvider() );
|
ComputerCraftAPI.registerMediaProvider( new DefaultMediaProvider() );
|
||||||
|
|
||||||
// Register network providers
|
// Register network providers
|
||||||
ComputerCraftAPI.registerWiredProvider( new DefaultWiredProvider() );
|
CapabilityWiredElement.register();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void registerForgeHandlers()
|
private void registerForgeHandlers()
|
||||||
|
@ -0,0 +1,69 @@
|
|||||||
|
package dan200.computercraft.shared.wired;
|
||||||
|
|
||||||
|
import dan200.computercraft.api.network.wired.IWiredElement;
|
||||||
|
import dan200.computercraft.api.network.wired.IWiredNode;
|
||||||
|
import net.minecraft.nbt.NBTBase;
|
||||||
|
import net.minecraft.util.EnumFacing;
|
||||||
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.common.capabilities.Capability;
|
||||||
|
import net.minecraftforge.common.capabilities.CapabilityInject;
|
||||||
|
import net.minecraftforge.common.capabilities.CapabilityManager;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
|
public class CapabilityWiredElement
|
||||||
|
{
|
||||||
|
@CapabilityInject( IWiredElement.class )
|
||||||
|
public static Capability<IWiredElement> CAPABILITY = null;
|
||||||
|
|
||||||
|
public static void register()
|
||||||
|
{
|
||||||
|
CapabilityManager.INSTANCE.register( IWiredElement.class, new NullStorage(), NullElement::new );
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class NullElement implements IWiredElement
|
||||||
|
{
|
||||||
|
@Nonnull
|
||||||
|
@Override
|
||||||
|
public IWiredNode getNode()
|
||||||
|
{
|
||||||
|
throw new IllegalStateException( "Should not use the default element implementation" );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
@Override
|
||||||
|
public World getWorld()
|
||||||
|
{
|
||||||
|
throw new IllegalStateException( "Should not use the default element implementation" );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
@Override
|
||||||
|
public Vec3d getPosition()
|
||||||
|
{
|
||||||
|
throw new IllegalStateException( "Should not use the default element implementation" );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
@Override
|
||||||
|
public String getSenderID()
|
||||||
|
{
|
||||||
|
throw new IllegalStateException( "Should not use the default element implementation" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class NullStorage implements Capability.IStorage<IWiredElement>
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public NBTBase writeNBT( Capability<IWiredElement> capability, IWiredElement instance, EnumFacing side )
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readNBT( Capability<IWiredElement> capability, IWiredElement instance, EnumFacing side, NBTBase base )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,23 +0,0 @@
|
|||||||
package dan200.computercraft.shared.wired;
|
|
||||||
|
|
||||||
import dan200.computercraft.api.network.wired.IWiredElement;
|
|
||||||
import dan200.computercraft.api.network.wired.IWiredElementTile;
|
|
||||||
import dan200.computercraft.api.network.wired.IWiredProvider;
|
|
||||||
import net.minecraft.tileentity.TileEntity;
|
|
||||||
import net.minecraft.util.EnumFacing;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
|
||||||
import net.minecraft.world.IBlockAccess;
|
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
public class DefaultWiredProvider implements IWiredProvider
|
|
||||||
{
|
|
||||||
@Nullable
|
|
||||||
@Override
|
|
||||||
public IWiredElement getElement( @Nonnull IBlockAccess world, @Nonnull BlockPos pos, @Nonnull EnumFacing side )
|
|
||||||
{
|
|
||||||
TileEntity te = world.getTileEntity( pos );
|
|
||||||
return te instanceof IWiredElementTile ? ((IWiredElementTile) te).getWiredElement( side ) : null;
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user