package joshie.harvest.buildings;
import joshie.harvest.api.buildings.Building;
import joshie.harvest.api.buildings.IBuildingRegistry;
import joshie.harvest.buildings.building.BuildingFestivalDebug;
import joshie.harvest.core.HFCore;
import joshie.harvest.core.util.HFTemplate;
import joshie.harvest.core.util.ResourceLoader;
import joshie.harvest.core.util.annotations.HFApiImplementation;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.common.registry.IForgeRegistry;
import net.minecraftforge.fml.common.registry.RegistryBuilder;
import javax.annotation.Nullable;
import java.util.HashMap;
import static joshie.harvest.buildings.HFBuildings.getGson;
@HFApiImplementation
public class BuildingRegistry implements IBuildingRegistry {
public static final IForgeRegistry<Building> REGISTRY = new RegistryBuilder<Building>().setName(new ResourceLocation("harvestfestival", "buildings")).setType(Building.class).setIDRange(0, 32000).create();
public static final BuildingRegistry INSTANCE = new BuildingRegistry();
private final HashMap<Building, HFTemplate> instructions = new HashMap<>();
private BuildingRegistry() {}
@Override
public ItemStack getBlueprint(Building building) {
return HFBuildings.BLUEPRINTS.getStackFromObject(building);
}
@Override
public ItemStack getSpawner(Building building) {
return HFBuildings.STRUCTURES.getStackFromObject(building);
}
@Nullable
public HFTemplate getTemplateForBuilding(Building building) {
if (HFCore.DEBUG_MODE && building instanceof BuildingFestivalDebug) {
HFTemplate template = (getGson().fromJson(ResourceLoader.getJSONResource(HFBuildings.FESTIVAL_GROUNDS.getResource(), "buildings"), HFTemplate.class));
HFTemplate festival = (getGson().fromJson(ResourceLoader.getJSONResource(building.getResource(), "festivals"), HFTemplate.class));
template.merge(festival);
return template; //Merged yo!
}
HFTemplate template = instructions.get(building);
if (template == null) {
template = (getGson().fromJson(ResourceLoader.getJSONResource(building.getResource(), "buildings"), HFTemplate.class));
instructions.put(building, template);
}
return template;
}
}