mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-11-13 03:43:08 +00:00
- Remap everything to use MojMap class names too. This is what Forge
uses, so \o/.
This does NOT currently rename any classes to use suffix notation or
BlockEntity. That will come in a later change. We do however rename
references of "World" to "Level".
- Move the test mod into a separate "cctest" source set. As Forge now
works using Jigsaw we cannot have multiple mods defining the same
package, which causes problems with our JUnit test classes.
- Remove our custom test framework and replace it with vanilla's (this
is no longer stripped from the jar). RIP kotlin coroutines.
It's still worth using Kotlin here though, just for extension
methods.
- Other 1.17-related changes:
- Use separate tile/block entity tick methods for server and client
side, often avoiding ticking at all on the client.
- Switch much of the monitor rendering code to use vanilla's
built-in shader system. It's still an incredibly ugly hack, so not
really expecting this to work with any rendering mods, but we'll
cross that bridge when we come to it.
185 lines
6.0 KiB
Java
185 lines
6.0 KiB
Java
/*
|
|
* This file is part of ComputerCraft - http://www.computercraft.info
|
|
* Copyright Daniel Ratcliffe, 2011-2021. Do not distribute without permission.
|
|
* Send enquiries to dratcliffe@gmail.com
|
|
*/
|
|
package dan200.computercraft;
|
|
|
|
import dan200.computercraft.api.ComputerCraftAPI.IComputerCraftAPI;
|
|
import dan200.computercraft.api.filesystem.IMount;
|
|
import dan200.computercraft.api.filesystem.IWritableMount;
|
|
import dan200.computercraft.api.lua.GenericSource;
|
|
import dan200.computercraft.api.lua.ILuaAPIFactory;
|
|
import dan200.computercraft.api.media.IMediaProvider;
|
|
import dan200.computercraft.api.network.IPacketNetwork;
|
|
import dan200.computercraft.api.network.wired.IWiredElement;
|
|
import dan200.computercraft.api.network.wired.IWiredNode;
|
|
import dan200.computercraft.api.peripheral.IPeripheralProvider;
|
|
import dan200.computercraft.api.pocket.IPocketUpgrade;
|
|
import dan200.computercraft.api.redstone.IBundledRedstoneProvider;
|
|
import dan200.computercraft.api.turtle.ITurtleUpgrade;
|
|
import dan200.computercraft.core.apis.ApiFactories;
|
|
import dan200.computercraft.core.asm.GenericMethod;
|
|
import dan200.computercraft.core.filesystem.FileMount;
|
|
import dan200.computercraft.core.filesystem.ResourceMount;
|
|
import dan200.computercraft.shared.*;
|
|
import dan200.computercraft.shared.peripheral.generic.GenericPeripheralProvider;
|
|
import dan200.computercraft.shared.peripheral.modem.wireless.WirelessNetwork;
|
|
import dan200.computercraft.shared.util.IDAssigner;
|
|
import dan200.computercraft.shared.wired.WiredNode;
|
|
import net.minecraft.core.BlockPos;
|
|
import net.minecraft.core.Direction;
|
|
import net.minecraft.resources.ResourceLocation;
|
|
import net.minecraft.server.packs.resources.ReloadableResourceManager;
|
|
import net.minecraft.world.level.BlockGetter;
|
|
import net.minecraft.world.level.Level;
|
|
import net.minecraft.world.level.block.entity.BlockEntity;
|
|
import net.minecraftforge.common.capabilities.Capability;
|
|
import net.minecraftforge.common.util.LazyOptional;
|
|
import net.minecraftforge.fml.ModList;
|
|
import net.minecraftforge.fmllegacy.server.ServerLifecycleHooks;
|
|
|
|
import javax.annotation.Nonnull;
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
|
|
import static dan200.computercraft.shared.Capabilities.CAPABILITY_WIRED_ELEMENT;
|
|
|
|
public final class ComputerCraftAPIImpl implements IComputerCraftAPI
|
|
{
|
|
public static final ComputerCraftAPIImpl INSTANCE = new ComputerCraftAPIImpl();
|
|
|
|
private String version;
|
|
|
|
private ComputerCraftAPIImpl()
|
|
{
|
|
}
|
|
|
|
public static InputStream getResourceFile( String domain, String subPath )
|
|
{
|
|
ReloadableResourceManager manager = (ReloadableResourceManager) ServerLifecycleHooks.getCurrentServer().getResourceManager();
|
|
try
|
|
{
|
|
return manager.getResource( new ResourceLocation( domain, subPath ) ).getInputStream();
|
|
}
|
|
catch( IOException ignored )
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
|
|
@Nonnull
|
|
@Override
|
|
public String getInstalledVersion()
|
|
{
|
|
if( version != null ) return version;
|
|
return version = ModList.get().getModContainerById( ComputerCraft.MOD_ID )
|
|
.map( x -> x.getModInfo().getVersion().toString() )
|
|
.orElse( "unknown" );
|
|
}
|
|
|
|
@Override
|
|
public int createUniqueNumberedSaveDir( @Nonnull Level world, @Nonnull String parentSubPath )
|
|
{
|
|
return IDAssigner.getNextId( parentSubPath );
|
|
}
|
|
|
|
@Override
|
|
public IWritableMount createSaveDirMount( @Nonnull Level world, @Nonnull String subPath, long capacity )
|
|
{
|
|
try
|
|
{
|
|
return new FileMount( new File( IDAssigner.getDir(), subPath ), capacity );
|
|
}
|
|
catch( Exception e )
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public IMount createResourceMount( @Nonnull String domain, @Nonnull String subPath )
|
|
{
|
|
ReloadableResourceManager manager = (ReloadableResourceManager) ServerLifecycleHooks.getCurrentServer().getResourceManager();
|
|
ResourceMount mount = ResourceMount.get( domain, subPath, manager );
|
|
return mount.exists( "" ) ? mount : null;
|
|
}
|
|
|
|
@Override
|
|
public void registerPeripheralProvider( @Nonnull IPeripheralProvider provider )
|
|
{
|
|
Peripherals.register( provider );
|
|
}
|
|
|
|
@Override
|
|
public void registerGenericSource( @Nonnull GenericSource source )
|
|
{
|
|
GenericMethod.register( source );
|
|
}
|
|
|
|
@Override
|
|
public void registerGenericCapability( @Nonnull Capability<?> capability )
|
|
{
|
|
GenericPeripheralProvider.addCapability( capability );
|
|
}
|
|
|
|
@Override
|
|
public void registerTurtleUpgrade( @Nonnull ITurtleUpgrade upgrade )
|
|
{
|
|
TurtleUpgrades.register( upgrade );
|
|
}
|
|
|
|
@Override
|
|
public void registerBundledRedstoneProvider( @Nonnull IBundledRedstoneProvider provider )
|
|
{
|
|
BundledRedstone.register( provider );
|
|
}
|
|
|
|
@Override
|
|
public int getBundledRedstoneOutput( @Nonnull Level world, @Nonnull BlockPos pos, @Nonnull Direction side )
|
|
{
|
|
return BundledRedstone.getDefaultOutput( world, pos, side );
|
|
}
|
|
|
|
@Override
|
|
public void registerMediaProvider( @Nonnull IMediaProvider provider )
|
|
{
|
|
MediaProviders.register( provider );
|
|
}
|
|
|
|
@Override
|
|
public void registerPocketUpgrade( @Nonnull IPocketUpgrade upgrade )
|
|
{
|
|
PocketUpgrades.register( upgrade );
|
|
}
|
|
|
|
@Nonnull
|
|
@Override
|
|
public IPacketNetwork getWirelessNetwork()
|
|
{
|
|
return WirelessNetwork.getUniversal();
|
|
}
|
|
|
|
@Override
|
|
public void registerAPIFactory( @Nonnull ILuaAPIFactory factory )
|
|
{
|
|
ApiFactories.register( factory );
|
|
}
|
|
|
|
@Nonnull
|
|
@Override
|
|
public IWiredNode createWiredNodeForElement( @Nonnull IWiredElement element )
|
|
{
|
|
return new WiredNode( element );
|
|
}
|
|
|
|
@Nonnull
|
|
@Override
|
|
public LazyOptional<IWiredElement> getWiredElementAt( @Nonnull BlockGetter world, @Nonnull BlockPos pos, @Nonnull Direction side )
|
|
{
|
|
BlockEntity tile = world.getBlockEntity( pos );
|
|
return tile == null ? LazyOptional.empty() : tile.getCapability( CAPABILITY_WIRED_ELEMENT, side );
|
|
}
|
|
}
|