2016-05-23 23:47:31 +02:00
package com.pahimar.ee3.blacklist ;
import com.pahimar.ee3.api.exchange.EnergyValueRegistryProxy ;
2016-06-01 21:07:40 +02:00
import com.pahimar.ee3.exchange.OreStack ;
2016-05-23 23:47:31 +02:00
import com.pahimar.ee3.exchange.WrappedStack ;
import com.pahimar.ee3.util.LoaderHelper ;
import com.pahimar.ee3.util.LogHelper ;
2016-06-01 21:07:40 +02:00
import com.pahimar.ee3.util.OreDictionaryHelper ;
2016-05-23 23:47:31 +02:00
import com.pahimar.ee3.util.SerializationHelper ;
import cpw.mods.fml.common.Loader ;
import net.minecraft.item.ItemStack ;
import net.minecraftforge.common.MinecraftForge ;
import org.apache.logging.log4j.Marker ;
import org.apache.logging.log4j.MarkerManager ;
import java.io.File ;
2016-06-01 21:07:40 +02:00
import java.util.Collection ;
2016-05-25 05:12:49 +02:00
import java.util.Collections ;
2016-05-23 23:47:31 +02:00
import java.util.Set ;
import java.util.TreeSet ;
2016-05-25 15:56:42 +02:00
import java.util.stream.Collectors ;
2016-05-23 23:47:31 +02:00
import static com.pahimar.ee3.api.blacklist.BlacklistRegistryProxy.Blacklist ;
import static com.pahimar.ee3.api.event.BlacklistEvent.* ;
// TODO Logging
public class BlacklistRegistry {
public static final BlacklistRegistry INSTANCE = new BlacklistRegistry ( ) ;
private static final Marker BLACKLIST_MARKER = MarkerManager . getMarker ( " EE3_BLACKLIST " , LogHelper . MOD_MARKER ) ;
2016-05-25 18:42:18 +02:00
private static final Marker KNOWLEDGE_MARKER = MarkerManager . getMarker ( " EE3_KNOWLEDGE " , BLACKLIST_MARKER ) ;
private static final Marker KNOWLEDGE_BLACKLIST_MARKER = MarkerManager . getMarker ( " EE3_KNOWLEDGE_BLACKLIST " , KNOWLEDGE_MARKER ) ;
private static final Marker KNOWLEDGE_WHITELIST_MARKER = MarkerManager . getMarker ( " EE3_KNOWLEDGE_WHITELIST " , KNOWLEDGE_MARKER ) ;
private static final Marker EXCHANGE_MARKER = MarkerManager . getMarker ( " EE3_EXCHANGE " , BLACKLIST_MARKER ) ;
private static final Marker EXCHANGE_BLACKLIST_MARKER = MarkerManager . getMarker ( " EE3_EXCHANGE_BLACKLIST " , EXCHANGE_MARKER ) ;
private static final Marker EXCHANGE_WHITELIST_MARKER = MarkerManager . getMarker ( " EE3_EXCHANGE_WHITELIST " , EXCHANGE_MARKER ) ;
2016-05-23 23:47:31 +02:00
2016-05-25 05:12:49 +02:00
private final Set < WrappedStack > knowledgeBlacklist , exchangeBlacklist ;
public static File knowledgeBlacklistFile , exchangeBlacklistFile ;
2016-05-25 16:17:40 +02:00
private transient boolean shouldSave ;
2016-05-23 23:47:31 +02:00
/ * *
* TODO Finish JavaDoc
* /
private BlacklistRegistry ( ) {
knowledgeBlacklist = new TreeSet < > ( ) ;
exchangeBlacklist = new TreeSet < > ( ) ;
2016-05-25 16:17:40 +02:00
shouldSave = true ;
2016-05-25 05:12:49 +02:00
}
/ * *
* TODO Finish JavaDoc
*
* @return
* /
public Set < WrappedStack > getKnowledgeBlacklist ( ) {
return Collections . unmodifiableSet ( knowledgeBlacklist ) ;
}
/ * *
* TODO Finish JavaDoc
*
* @return
* /
public Set < WrappedStack > getExchangeBlacklist ( ) {
return Collections . unmodifiableSet ( exchangeBlacklist ) ;
2016-05-23 23:47:31 +02:00
}
/ * *
* TODO Finish JavaDoc
*
* @param object
* @return
* /
public boolean isLearnable ( Object object ) {
if ( WrappedStack . canBeWrapped ( object ) ) {
WrappedStack wrappedObject = WrappedStack . wrap ( object , 1 ) ;
if ( object instanceof ItemStack & & ( ( ItemStack ) object ) . isItemDamaged ( ) ) {
return false ;
}
else {
2016-06-01 21:07:40 +02:00
if ( EnergyValueRegistryProxy . hasEnergyValue ( wrappedObject ) ) {
if ( knowledgeBlacklist . contains ( wrappedObject ) ) {
return false ;
}
else if ( object instanceof ItemStack ) {
Collection < String > oreNames = OreDictionaryHelper . getOreNames ( ( ItemStack ) object ) ;
for ( String oreName : oreNames ) {
boolean isNotLearnable = ! isLearnable ( new OreStack ( oreName ) ) ;
if ( isNotLearnable ) {
return false ;
}
}
}
}
2016-05-23 23:47:31 +02:00
}
}
return false ;
}
/ * *
* TODO Finish JavaDoc
*
* @param object
* @return
* /
public boolean isExchangeable ( Object object ) {
if ( WrappedStack . canBeWrapped ( object ) ) {
2016-06-01 21:07:40 +02:00
WrappedStack wrappedObject = WrappedStack . wrap ( object , 1 ) ;
if ( EnergyValueRegistryProxy . hasEnergyValue ( wrappedObject ) ) {
if ( exchangeBlacklist . contains ( wrappedObject ) ) {
return false ;
}
else if ( object instanceof ItemStack ) {
Collection < String > oreNames = OreDictionaryHelper . getOreNames ( ( ItemStack ) object ) ;
for ( String oreName : oreNames ) {
boolean isNotLearnable = ! isLearnable ( new OreStack ( oreName ) ) ;
if ( isNotLearnable ) {
return false ;
}
}
}
}
2016-05-23 23:47:31 +02:00
}
return false ;
}
/ * *
* TODO Finish JavaDoc
*
* @param object
* @param blacklist
* /
public void addToBlacklist ( Object object , Blacklist blacklist ) {
if ( WrappedStack . canBeWrapped ( object ) ) {
WrappedStack wrappedStack = WrappedStack . wrap ( object , 1 ) ;
if ( blacklist = = Blacklist . KNOWLEDGE ) {
if ( wrappedStack ! = null & & ! MinecraftForge . EVENT_BUS . post ( new KnowledgeBlacklistEvent ( object ) ) ) {
LogHelper . trace ( KNOWLEDGE_BLACKLIST_MARKER , " [{}] Mod with ID '{}' added object {} to the player knowledge blacklist " , LoaderHelper . getLoaderState ( ) , Loader . instance ( ) . activeModContainer ( ) . getModId ( ) , wrappedStack ) ;
knowledgeBlacklist . add ( WrappedStack . wrap ( object , 1 ) ) ;
save ( blacklist ) ;
}
}
else if ( blacklist = = Blacklist . EXCHANGE ) {
if ( wrappedStack ! = null & & ! MinecraftForge . EVENT_BUS . post ( new ExchangeBlacklistEvent ( object ) ) ) {
LogHelper . trace ( EXCHANGE_BLACKLIST_MARKER , " [{}] Mod with ID '{}' added object {} to the exchange blacklist " , LoaderHelper . getLoaderState ( ) , Loader . instance ( ) . activeModContainer ( ) . getModId ( ) , wrappedStack ) ;
exchangeBlacklist . add ( WrappedStack . wrap ( object , 1 ) ) ;
save ( blacklist ) ;
}
}
}
}
/ * *
* TODO Finish JavaDoc
*
* @param object
* @param blacklist
* /
public void removeFromBlacklist ( Object object , Blacklist blacklist ) {
if ( WrappedStack . canBeWrapped ( object ) ) {
WrappedStack wrappedStack = WrappedStack . wrap ( object , 1 ) ;
if ( blacklist = = Blacklist . KNOWLEDGE ) {
if ( wrappedStack ! = null & & ! MinecraftForge . EVENT_BUS . post ( new KnowledgeWhitelistEvent ( object ) ) ) {
LogHelper . trace ( KNOWLEDGE_WHITELIST_MARKER , " [{}] Mod with ID '{}' removed object {} from the player knowledge blacklist " , LoaderHelper . getLoaderState ( ) , Loader . instance ( ) . activeModContainer ( ) . getModId ( ) , wrappedStack ) ;
knowledgeBlacklist . remove ( wrappedStack ) ;
2016-05-24 20:58:56 +02:00
save ( blacklist ) ;
2016-05-23 23:47:31 +02:00
}
}
else if ( blacklist = = Blacklist . EXCHANGE ) {
if ( wrappedStack ! = null & & ! MinecraftForge . EVENT_BUS . post ( new ExchangeWhitelistEvent ( object ) ) ) {
LogHelper . trace ( EXCHANGE_WHITELIST_MARKER , " [{}] Mod with ID '{}' removed object {} from the exchange blacklist " , LoaderHelper . getLoaderState ( ) , Loader . instance ( ) . activeModContainer ( ) . getModId ( ) , wrappedStack ) ;
exchangeBlacklist . remove ( wrappedStack ) ;
2016-05-24 20:58:56 +02:00
save ( blacklist ) ;
2016-05-23 23:47:31 +02:00
}
}
}
}
2016-05-25 17:01:07 +02:00
/ * *
* TODO Finish JavaDoc
*
* @param shouldSave
* /
2016-05-25 16:17:40 +02:00
public void setShouldSave ( boolean shouldSave ) {
this . shouldSave = shouldSave ;
}
2016-05-23 23:47:31 +02:00
/ * *
* TODO Finish JavaDoc
* /
public void load ( ) {
2016-05-25 15:56:42 +02:00
if ( knowledgeBlacklistFile ! = null ) {
Set < WrappedStack > knowledgeBlacklistSet = SerializationHelper . readSetFromFile ( knowledgeBlacklistFile ) ;
knowledgeBlacklist . clear ( ) ;
knowledgeBlacklist . addAll ( knowledgeBlacklistSet . stream ( ) . filter ( wrappedStack - > wrappedStack ! = null ) . collect ( Collectors . toList ( ) ) ) ;
}
2016-05-25 05:12:49 +02:00
2016-05-25 15:56:42 +02:00
if ( exchangeBlacklistFile ! = null ) {
2016-05-25 18:42:18 +02:00
Set < WrappedStack > exchangeBlacklistSet = SerializationHelper . readSetFromFile ( exchangeBlacklistFile ) ;
2016-05-25 15:56:42 +02:00
exchangeBlacklist . clear ( ) ;
exchangeBlacklist . addAll ( exchangeBlacklistSet . stream ( ) . filter ( wrappedStack - > wrappedStack ! = null ) . collect ( Collectors . toList ( ) ) ) ;
}
2016-05-25 05:12:49 +02:00
}
2016-05-25 17:01:07 +02:00
/ * *
* TODO Finish JavaDoc
*
* @param blacklistSet
* @param blacklist
* /
2016-05-25 05:12:49 +02:00
public void load ( Set < WrappedStack > blacklistSet , Blacklist blacklist ) {
if ( blacklist ! = null & & blacklistSet ! = null ) {
2016-05-23 23:47:31 +02:00
2016-05-25 16:17:40 +02:00
setShouldSave ( false ) ;
2016-05-25 05:12:49 +02:00
if ( blacklist = = Blacklist . KNOWLEDGE ) {
LogHelper . info ( " Received {} player knowledge blacklist entries from server " , blacklistSet . size ( ) ) ;
knowledgeBlacklist . clear ( ) ;
2016-05-25 15:56:42 +02:00
knowledgeBlacklist . addAll ( blacklistSet . stream ( ) . filter ( wrappedStack - > wrappedStack ! = null ) . collect ( Collectors . toList ( ) ) ) ;
2016-05-25 05:12:49 +02:00
}
else if ( blacklist = = Blacklist . EXCHANGE ) {
LogHelper . info ( " Received {} exchange blacklist entries from server " , blacklistSet . size ( ) ) ;
exchangeBlacklist . clear ( ) ;
2016-05-25 15:56:42 +02:00
exchangeBlacklist . addAll ( blacklistSet . stream ( ) . filter ( wrappedStack - > wrappedStack ! = null ) . collect ( Collectors . toList ( ) ) ) ;
2016-05-25 05:12:49 +02:00
}
2016-05-23 23:47:31 +02:00
}
}
/ * *
* TODO Finish JavaDoc
*
* @param blacklist
* /
public void save ( Blacklist blacklist ) {
2016-05-25 16:17:40 +02:00
if ( shouldSave ) {
2016-05-28 14:23:31 +02:00
if ( blacklist = = Blacklist . KNOWLEDGE & & knowledgeBlacklistFile ! = null ) {
2016-05-23 23:47:31 +02:00
SerializationHelper . writeJsonFile ( knowledgeBlacklistFile , SerializationHelper . GSON . toJson ( knowledgeBlacklist ) ) ;
}
2016-05-28 14:23:31 +02:00
else if ( blacklist = = Blacklist . EXCHANGE & & exchangeBlacklistFile ! = null ) {
2016-05-23 23:47:31 +02:00
SerializationHelper . writeJsonFile ( exchangeBlacklistFile , SerializationHelper . GSON . toJson ( exchangeBlacklist ) ) ;
}
}
}
/ * *
* TODO Finish JavaDoc
* /
public void saveAll ( ) {
2016-05-28 14:23:31 +02:00
if ( shouldSave & & knowledgeBlacklistFile ! = null & & exchangeBlacklistFile ! = null ) {
2016-05-23 23:47:31 +02:00
LogHelper . trace ( BLACKLIST_MARKER , " Saving all blacklists to disk " , exchangeBlacklistFile . getAbsolutePath ( ) ) ;
SerializationHelper . writeJsonFile ( knowledgeBlacklistFile , SerializationHelper . GSON . toJson ( knowledgeBlacklist ) ) ;
SerializationHelper . writeJsonFile ( exchangeBlacklistFile , SerializationHelper . GSON . toJson ( exchangeBlacklist ) ) ;
}
}
}