Applied-Energistics-2-tiler.../src/main/java/appeng/core/worlddata/StorageData.java
yueh 02ac8cf220 Refactored the logging
Using LogManager instead of FMLRelaunchLog to access the logger instance.
Added logging of the name of failed exports instead of exception.
Improved crafting log to include issuer including their location and the
requested item.
Removed superfluous FMLRelaunchLog instance.
Removed superfluous parameters for PlayerData constructor.
2016-01-01 02:55:36 +01:00

166 lines
4.9 KiB
Java

/*
* This file is part of Applied Energistics 2.
* Copyright (c) 2013 - 2015, AlgorithmX2, All rights reserved.
*
* Applied Energistics 2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Applied Energistics 2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
*/
package appeng.core.worlddata;
import java.lang.ref.WeakReference;
import java.util.Map;
import java.util.WeakHashMap;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import com.google.common.base.Preconditions;
import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.common.config.Property;
import appeng.core.AELog;
import appeng.me.GridStorage;
import appeng.me.GridStorageSearch;
/**
* @author thatsIch
* @version rv3 - 30.05.2015
* @since rv3 30.05.2015
*/
final class StorageData implements IWorldGridStorageData, IOnWorldStartable, IOnWorldStoppable
{
private static final String LAST_GRID_STORAGE_CATEGORY = "Counters";
private static final String LAST_GRID_STORAGE_KEY = "lastGridStorage";
private static final int LAST_GRID_STORAGE_DEFAULT = 0;
private static final String GRID_STORAGE_CATEGORY = "gridstorage";
private final Map<GridStorageSearch, WeakReference<GridStorageSearch>> loadedStorage = new WeakHashMap<GridStorageSearch, WeakReference<GridStorageSearch>>( 10 );
private final Configuration config;
private long lastGridStorage;
public StorageData( @Nonnull final Configuration settingsFile )
{
Preconditions.checkNotNull( settingsFile );
this.config = settingsFile;
}
/**
* lazy loading, can load any id, even ones that don't exist anymore.
*
* @param storageID ID of grid storage
*
* @return corresponding grid storage
*/
@Nullable
@Override
public GridStorage getGridStorage( final long storageID )
{
final GridStorageSearch gss = new GridStorageSearch( storageID );
final WeakReference<GridStorageSearch> result = this.loadedStorage.get( gss );
if( result == null || result.get() == null )
{
final String id = String.valueOf( storageID );
final String data = this.config.get( "gridstorage", id, "" ).getString();
final GridStorage thisStorage = new GridStorage( data, storageID, gss );
gss.setGridStorage( new WeakReference<GridStorage>( thisStorage ) );
this.loadedStorage.put( gss, new WeakReference<GridStorageSearch>( gss ) );
return thisStorage;
}
return result.get().getGridStorage().get();
}
/**
* create a new storage
*/
@Nonnull
@Override
public GridStorage getNewGridStorage()
{
final long storageID = this.nextGridStorage();
final GridStorageSearch gss = new GridStorageSearch( storageID );
final GridStorage newStorage = new GridStorage( storageID, gss );
gss.setGridStorage( new WeakReference<GridStorage>( newStorage ) );
this.loadedStorage.put( gss, new WeakReference<GridStorageSearch>( gss ) );
return newStorage;
}
@Override
public long nextGridStorage()
{
final long r = this.lastGridStorage;
this.lastGridStorage++;
this.config.get( "Counters", "lastGridStorage", this.lastGridStorage ).set( Long.toString( this.lastGridStorage ) );
return r;
}
@Override
public void destroyGridStorage( final long id )
{
final String stringID = String.valueOf( id );
this.config.getCategory( "gridstorage" ).remove( stringID );
}
@Override
public int getNextOrderedValue( final String name )
{
final Property p = this.config.get( "orderedValues", name, 0 );
final int myValue = p.getInt();
p.set( myValue + 1 );
return myValue;
}
@Override
public void onWorldStart()
{
final String lastString = this.config.get( LAST_GRID_STORAGE_CATEGORY, LAST_GRID_STORAGE_KEY, LAST_GRID_STORAGE_DEFAULT ).getString();
try
{
this.lastGridStorage = Long.parseLong( lastString );
}
catch( final NumberFormatException err )
{
AELog.warn( "The config contained a value which was not represented as a Long: %s", lastString );
this.lastGridStorage = 0;
}
}
@Override
public void onWorldStop()
{
// populate new data
for( final GridStorageSearch gs : this.loadedStorage.keySet() )
{
final GridStorage thisStorage = gs.getGridStorage().get();
if( thisStorage != null && thisStorage.getGrid() != null && !thisStorage.getGrid().isEmpty() )
{
final String value = thisStorage.getValue();
this.config.get( GRID_STORAGE_CATEGORY, String.valueOf( thisStorage.getID() ), value ).set( value );
}
}
this.config.save();
}
}