mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2024-06-24 06:03:28 +00:00
![SquidDev](/assets/img/avatar_default.png)
This will hopefully make it easier to track down various issues which might otherwise go unnoticed or provide little information. The main areas modified are those that external APIs may provide values for or interact with: various providers and ILuaObject/IPeripheral implementations. However, we do also log in a couple of other places which indicate a problem with this, or another, mod.
119 lines
3.4 KiB
Java
119 lines
3.4 KiB
Java
package dan200.computercraft.shared.util;
|
|
|
|
import dan200.computercraft.core.logger.Logger;
|
|
|
|
import java.io.*;
|
|
|
|
public class IDAssigner
|
|
{
|
|
private IDAssigner()
|
|
{
|
|
}
|
|
|
|
public static int getNextIDFromDirectory( File dir )
|
|
{
|
|
return getNextID( dir, true );
|
|
}
|
|
|
|
public static int getNextIDFromFile( File file )
|
|
{
|
|
return getNextID( file, false );
|
|
}
|
|
|
|
private static int getNextID( File location, boolean directory )
|
|
{
|
|
// Determine where to locate ID file
|
|
File lastidFile;
|
|
if( directory )
|
|
{
|
|
location.mkdirs();
|
|
lastidFile = new File( location, "lastid.txt" );
|
|
}
|
|
else
|
|
{
|
|
location.getParentFile().mkdirs();
|
|
lastidFile = location;
|
|
}
|
|
|
|
// Try to determine the id
|
|
int id = 0;
|
|
if( !lastidFile.exists() )
|
|
{
|
|
// If an ID file doesn't exist, determine it from the file structure
|
|
if( directory && location.exists() && location.isDirectory() )
|
|
{
|
|
String[] contents = location.list();
|
|
for( String content : contents )
|
|
{
|
|
try
|
|
{
|
|
int number = Integer.parseInt( content );
|
|
id = Math.max( number + 1, id );
|
|
}
|
|
catch( NumberFormatException e )
|
|
{
|
|
Logger.error( "Unexpected file '" + content + "' in '" + location.getAbsolutePath() + "'", e );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// If an ID file does exist, parse the file to get the ID string
|
|
String idString;
|
|
try
|
|
{
|
|
FileInputStream in = new FileInputStream( lastidFile );
|
|
InputStreamReader isr;
|
|
try
|
|
{
|
|
isr = new InputStreamReader( in, "UTF-8" );
|
|
}
|
|
catch( UnsupportedEncodingException e )
|
|
{
|
|
isr = new InputStreamReader( in );
|
|
}
|
|
BufferedReader br = new BufferedReader( isr );
|
|
try
|
|
{
|
|
idString = br.readLine();
|
|
}
|
|
finally
|
|
{
|
|
br.close();
|
|
}
|
|
}
|
|
catch( IOException e )
|
|
{
|
|
Logger.error( "Cannot open ID file '" + lastidFile + "'", e );
|
|
return 0;
|
|
}
|
|
|
|
try
|
|
{
|
|
id = Integer.parseInt( idString ) + 1;
|
|
}
|
|
catch( NumberFormatException e )
|
|
{
|
|
Logger.error( "Cannot parse ID file '" + lastidFile + "', perhaps it is corrupt?", e );
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
// Write the lastID file out with the new value
|
|
try
|
|
{
|
|
BufferedWriter out = new BufferedWriter( new FileWriter( lastidFile, false ) );
|
|
out.write( Integer.toString( id ) );
|
|
out.newLine();
|
|
out.close();
|
|
}
|
|
catch( IOException e )
|
|
{
|
|
Logger.error( "An error occured while trying to create the computer folder. Please check you have relevant permissions.", e );
|
|
}
|
|
|
|
return id;
|
|
}
|
|
}
|