/*******************************************************************************
* AbyssalCraft
* Copyright (c) 2012 - 2017 Shinoow.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v3
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/lgpl-3.0.txt
*
* Contributors:
* Shinoow - implementation
******************************************************************************/
package com.shinoow.abyssalcraft.common.caps;
import java.util.List;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityList;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.biome.Biome;
import com.google.common.base.Predicate;
import com.google.common.collect.Lists;
import com.shinoow.abyssalcraft.api.necronomicon.condition.IUnlockCondition;
public class NecroDataCapability implements INecroDataCapability {
List<String> biome_triggers = Lists.newArrayList();
List<String> entity_triggers = Lists.newArrayList();
List<Integer> dimension_triggers = Lists.newArrayList();
@Override
public boolean isUnlocked(IUnlockCondition cond) {
if(cond.getType() == -1) return true;
switch(cond.getType()){
case 0:
return biome_triggers.contains(cond.getConditionObject());
case 1:
return entity_triggers.contains(cond.getConditionObject());
case 2:
return dimension_triggers.contains(cond.getConditionObject());
case 3:
for(String name : (String[])cond.getConditionObject())
if(biome_triggers.contains(name))
return true;
break;
case 4:
for(String name : (String[])cond.getConditionObject())
if(entity_triggers.contains(name))
return true;
break;
case 5:
for(String name : biome_triggers)
if(((Predicate<Biome>)cond.getConditionObject()).apply(Biome.REGISTRY.getObject(new ResourceLocation(name))))
return true;
break;
case 6:
for(String name : entity_triggers)
if(((Predicate<Class<? extends Entity>>)cond.getConditionObject()).apply(EntityList.getClass(new ResourceLocation(name))))
return true;
break;
}
return false;
}
@Override
public void triggerEntityUnlock(String name) {
if(name != null && !entity_triggers.contains(name) && name.contains(":"))
entity_triggers.add(name);
}
@Override
public void triggerBiomeUnlock(String name) {
if(name != null && !biome_triggers.contains(name))
biome_triggers.add(name);
}
@Override
public void triggerDimensionUnlock(int id) {
if(!dimension_triggers.contains(id))
dimension_triggers.add(id);
}
@Override
public List<String> getBiomeTriggers() {
return biome_triggers;
}
@Override
public List<String> getEntityTriggers() {
return entity_triggers;
}
@Override
public List<Integer> getDimensionTriggers() {
return dimension_triggers;
}
@Override
public void copy(INecroDataCapability cap) {
biome_triggers.addAll(cap.getBiomeTriggers());
entity_triggers.addAll(cap.getEntityTriggers());
dimension_triggers.addAll(cap.getDimensionTriggers());
}
}