2014-11-27 17:06:48 +01:00
|
|
|
/*
|
|
|
|
* This file is part of Applied Energistics 2.
|
2015-05-16 20:48:32 +02:00
|
|
|
* Copyright (c) 2013 - 2015, AlgorithmX2, All rights reserved.
|
2014-11-27 17:06:48 +01:00
|
|
|
*
|
|
|
|
* 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;
|
|
|
|
|
|
|
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
import java.util.Map;
|
|
|
|
|
2015-06-16 02:44:59 +02:00
|
|
|
import net.minecraftforge.fml.common.event.FMLInterModComms;
|
2014-11-27 17:06:48 +01:00
|
|
|
import appeng.api.config.TunnelType;
|
|
|
|
import appeng.core.api.IIMCProcessor;
|
|
|
|
import appeng.core.api.imc.IMCBlackListSpatial;
|
|
|
|
import appeng.core.api.imc.IMCGrinder;
|
|
|
|
import appeng.core.api.imc.IMCMatterCannon;
|
|
|
|
import appeng.core.api.imc.IMCP2PAttunement;
|
|
|
|
import appeng.core.api.imc.IMCSpatial;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Handles the delegation of the corresponding IMC messages to the suitable IMC processors
|
|
|
|
*/
|
|
|
|
public class IMCHandler
|
|
|
|
{
|
2015-05-16 20:48:32 +02:00
|
|
|
private static final int INITIAL_PROCESSORS_CAPACITY = 20;
|
|
|
|
|
2014-11-27 17:06:48 +01:00
|
|
|
/**
|
|
|
|
* Contains the processors,
|
|
|
|
*
|
|
|
|
* is mutable,
|
|
|
|
* but write access only by the constructor
|
|
|
|
*/
|
|
|
|
private final Map<String, IIMCProcessor> processors;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Initializes the processors
|
|
|
|
*/
|
|
|
|
public IMCHandler()
|
|
|
|
{
|
2015-05-16 20:48:32 +02:00
|
|
|
this.processors = new HashMap<String, IIMCProcessor>( INITIAL_PROCESSORS_CAPACITY );
|
2014-11-27 17:06:48 +01:00
|
|
|
|
|
|
|
this.processors.put( "blacklist-block-spatial", new IMCBlackListSpatial() );
|
|
|
|
this.processors.put( "whitelist-spatial", new IMCSpatial() );
|
|
|
|
this.processors.put( "add-grindable", new IMCGrinder() );
|
|
|
|
this.processors.put( "add-mattercannon-ammo", new IMCMatterCannon() );
|
|
|
|
|
2015-04-03 08:54:31 +02:00
|
|
|
for( TunnelType type : TunnelType.values() )
|
2014-11-27 17:06:48 +01:00
|
|
|
{
|
|
|
|
this.processors.put( "add-p2p-attunement-" + type.name().replace( '_', '-' ).toLowerCase(), new IMCP2PAttunement() );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Tries to find every message matching the internal IMC keys.
|
|
|
|
* When found the corresponding handler will process the attached message.
|
|
|
|
*
|
|
|
|
* @param event Event carrying the identifier and message for the handlers
|
|
|
|
*/
|
|
|
|
public void handleIMCEvent( FMLInterModComms.IMCEvent event )
|
|
|
|
{
|
2015-04-03 08:54:31 +02:00
|
|
|
for( FMLInterModComms.IMCMessage message : event.getMessages() )
|
2014-11-27 17:06:48 +01:00
|
|
|
{
|
|
|
|
final String key = message.key;
|
|
|
|
|
|
|
|
try
|
|
|
|
{
|
|
|
|
IIMCProcessor handler = this.processors.get( key );
|
2015-04-03 08:54:31 +02:00
|
|
|
if( handler != null )
|
2014-11-27 17:06:48 +01:00
|
|
|
{
|
|
|
|
handler.process( message );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2015-03-23 10:14:35 +01:00
|
|
|
throw new IllegalStateException( "Invalid IMC Called: " + key );
|
2014-11-27 17:06:48 +01:00
|
|
|
}
|
|
|
|
}
|
2015-04-03 08:54:31 +02:00
|
|
|
catch( Throwable t )
|
2014-11-27 17:06:48 +01:00
|
|
|
{
|
|
|
|
AELog.warning( "Problem detected when processing IMC " + key + " from " + message.getSender() );
|
|
|
|
AELog.error( t );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|