1
0
mirror of https://github.com/SquidDev-CC/CC-Tweaked synced 2025-08-06 22:04:39 +00:00

Fix resource handle loading

See #70
This commit is contained in:
SquidDev 2018-10-29 15:59:43 +00:00
parent 7e334bd4a5
commit d53a73e7e7
4 changed files with 28 additions and 11 deletions

View File

@ -928,7 +928,7 @@ public class ComputerCraft
FileSystem fs = FileSystems.newFileSystem( modJar.toPath(), ComputerCraft.class.getClassLoader() ); FileSystem fs = FileSystems.newFileSystem( modJar.toPath(), ComputerCraft.class.getClassLoader() );
mounts.add( new FileSystemMount( fs, subPath ) ); mounts.add( new FileSystemMount( fs, subPath ) );
} }
catch( IOException | ProviderNotFoundException | ServiceConfigurationError e ) catch( IOException | RuntimeException | ServiceConfigurationError e )
{ {
ComputerCraft.log.error( "Could not load mount from mod jar", e ); ComputerCraft.log.error( "Could not load mount from mod jar", e );
// Ignore // Ignore
@ -940,16 +940,16 @@ public class ComputerCraft
if( resourcePackDir.exists() && resourcePackDir.isDirectory() ) if( resourcePackDir.exists() && resourcePackDir.isDirectory() )
{ {
String[] resourcePacks = resourcePackDir.list(); String[] resourcePacks = resourcePackDir.list();
for( String resourcePack1 : resourcePacks ) for( String resourcePackName : resourcePacks )
{ {
try try
{ {
File resourcePack = new File( resourcePackDir, resourcePack1 ); File resourcePack = new File( resourcePackDir, resourcePackName );
if( !resourcePack.isDirectory() ) if( !resourcePack.isDirectory() )
{ {
// Mount a resource pack from a jar // Mount a resource pack from a jar
IMount resourcePackMount = new FileSystemMount( FileSystems.getFileSystem( resourcePack.toURI() ), subPath ); FileSystem fs = FileSystems.newFileSystem( resourcePack.toPath(), ComputerCraft.class.getClassLoader() );
mounts.add( resourcePackMount ); mounts.add( new FileSystemMount( fs, subPath ) );
} }
else else
{ {
@ -962,9 +962,9 @@ public class ComputerCraft
} }
} }
} }
catch( IOException e ) catch( IOException | RuntimeException | ServiceConfigurationError e )
{ {
ComputerCraft.log.error( "Could not load resource pack '" + resourcePack1 + "'", e ); ComputerCraft.log.error( "Could not load resource pack '" + resourcePackName + "'", e );
} }
} }
} }

View File

@ -33,7 +33,7 @@ public class BinaryReadableHandle extends HandleGeneric
{ {
super( closeable ); super( closeable );
this.m_reader = channel; this.m_reader = channel;
this.m_seekable = channel instanceof SeekableByteChannel ? (SeekableByteChannel) channel : null; this.m_seekable = asSeekable( channel );
} }
public BinaryReadableHandle( ReadableByteChannel channel ) public BinaryReadableHandle( ReadableByteChannel channel )

View File

@ -27,7 +27,7 @@ public class BinaryWritableHandle extends HandleGeneric
{ {
super( closeable ); super( closeable );
this.m_writer = channel; this.m_writer = channel;
this.m_seekable = channel instanceof SeekableByteChannel ? (SeekableByteChannel) channel : null; this.m_seekable = asSeekable( channel );
} }
public BinaryWritableHandle( WritableByteChannel channel ) public BinaryWritableHandle( WritableByteChannel channel )

View File

@ -6,6 +6,7 @@ import dan200.computercraft.api.lua.LuaException;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import java.io.Closeable; import java.io.Closeable;
import java.io.IOException; import java.io.IOException;
import java.nio.channels.Channel;
import java.nio.channels.SeekableByteChannel; import java.nio.channels.SeekableByteChannel;
import static dan200.computercraft.core.apis.ArgumentHelper.optInt; import static dan200.computercraft.core.apis.ArgumentHelper.optInt;
@ -69,15 +70,31 @@ public abstract class HandleGeneric implements ILuaObject
throw new LuaException( "bad argument #1 to 'seek' (invalid option '" + whence + "'" ); throw new LuaException( "bad argument #1 to 'seek' (invalid option '" + whence + "'" );
} }
return new Object[] { channel.position() }; return new Object[]{ channel.position() };
} }
catch( IllegalArgumentException e ) catch( IllegalArgumentException e )
{ {
return new Object[] { false, "Position is negative" }; return new Object[]{ false, "Position is negative" };
} }
catch( IOException e ) catch( IOException e )
{ {
return null; return null;
} }
} }
protected static SeekableByteChannel asSeekable( Channel channel )
{
if( !(channel instanceof SeekableByteChannel) ) return null;
SeekableByteChannel seekable = (SeekableByteChannel) channel;
try
{
seekable.position( seekable.position() );
return seekable;
}
catch( IOException | UnsupportedOperationException e )
{
return null;
}
}
} }