<commit_before>package jaredbgreat.climaticbiome.compat.dynamictrees;

import jaredbgreat.climaticbiome.biomes.basic.ModBiomes;
import jaredbgreat.climaticbiome.blocks.BlockPineNeedles;
import jaredbgreat.climaticbiome.util.BlockRegistrar;

import net.minecraft.block.state.IBlockState;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.biome.Biome;
import net.minecraftforge.common.BiomeDictionary.Type;

import com.ferreusveritas.dynamictrees.ModTrees;
import com.ferreusveritas.dynamictrees.api.TreeRegistry;
import com.ferreusveritas.dynamictrees.systems.featuregen.FeatureGenConiferTopper;
import com.ferreusveritas.dynamictrees.systems.featuregen.FeatureGenPodzol;
import com.ferreusveritas.dynamictrees.trees.Species;
import com.ferreusveritas.dynamictrees.trees.TreeFamily;

public class TreePine extends TreeFamily {
	
	public class PineSpeciesBase extends Species {
		
		public PineSpeciesBase(TreeFamily treeFamily) {
			super(treeFamily.getName(), treeFamily, DynamicTreeHelper.pineLeavesProperties);

			setBasicGrowingParameters(0.2f, 16.0f, 3, 4, 1.3f);
			setGrowthLogicKit(TreeRegistry.findGrowthLogicKit(ModTrees.CONIFER));
			
			envFactor(Type.COLD, 0.50f);
			envFactor(Type.SNOWY, 0.25f);
			envFactor(Type.DRY, 0.75f);
			envFactor(Type.WASTELAND, 0.50f);
			envFactor(Type.FOREST, 1.05f);		
			
			setupStandardSeedDropping();
			
			//Add species features
			addGenFeature(new FeatureGenConiferTopper(getLeavesProperties()));
			addGenFeature(new FeatureGenPodzol());
			
		}
		
		@Override
		public boolean isBiomePerfect(Biome biome) {
			return biome == ModBiomes.pineWoods;
		}
		
	}
	
	
	public TreePine() {
		super(new ResourceLocation(Info.ID, "pine"));		
		IBlockState primLog = BlockRegistrar.blockPineLog.getDefaultState();
		setPrimitiveLog(primLog, new ItemStack(BlockRegistrar.blockPineLog));
		DynamicTreeHelper.pineLeavesProperties.setTree(this);
		addConnectableVanillaLeaves((state) -> {
			return state.getBlock() instanceof BlockPineNeedles;
		});
	}

	
	@Override
	public void createSpecies() {
		setCommonSpecies(new PineSpeciesBase(this));
		getCommonSpecies().generateSeed();
	}
<commit_msg>Subtropical forests are now perfect for pines<commit_after>package jaredbgreat.climaticbiome.compat.dynamictrees;

import jaredbgreat.climaticbiome.biomes.basic.ModBiomes;
import jaredbgreat.climaticbiome.blocks.BlockPineNeedles;
import jaredbgreat.climaticbiome.util.BlockRegistrar;

import net.minecraft.block.state.IBlockState;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.biome.Biome;
import net.minecraftforge.common.BiomeDictionary.Type;

import com.ferreusveritas.dynamictrees.ModTrees;
import com.ferreusveritas.dynamictrees.api.TreeRegistry;
import com.ferreusveritas.dynamictrees.systems.featuregen.FeatureGenConiferTopper;
import com.ferreusveritas.dynamictrees.systems.featuregen.FeatureGenPodzol;
import com.ferreusveritas.dynamictrees.trees.Species;
import com.ferreusveritas.dynamictrees.trees.TreeFamily;

public class TreePine extends TreeFamily {
	
	public class PineSpeciesBase extends Species {
		
		public PineSpeciesBase(TreeFamily treeFamily) {
			super(treeFamily.getName(), treeFamily, DynamicTreeHelper.pineLeavesProperties);

			setBasicGrowingParameters(0.2f, 16.0f, 3, 4, 1.3f);
			setGrowthLogicKit(TreeRegistry.findGrowthLogicKit(ModTrees.CONIFER));
			
			envFactor(Type.COLD, 0.50f);
			envFactor(Type.SNOWY, 0.25f);
			envFactor(Type.DRY, 0.75f);
			envFactor(Type.WASTELAND, 0.50f);
			envFactor(Type.FOREST, 1.05f);		
			
			setupStandardSeedDropping();
			
			//Add species features
			addGenFeature(new FeatureGenConiferTopper(getLeavesProperties()));
			addGenFeature(new FeatureGenPodzol());
			
		}
		
		@Override
		public boolean isBiomePerfect(Biome biome) {
			return biome == ModBiomes.pineWoods 
				|| biome == ModBiomes.warmForest
				|| biome == ModBiomes.warmForestHills;
		}
		
	}
	
	
	public TreePine() {
		super(new ResourceLocation(Info.ID, "pine"));		
		IBlockState primLog = BlockRegistrar.blockPineLog.getDefaultState();
		setPrimitiveLog(primLog, new ItemStack(BlockRegistrar.blockPineLog));
		DynamicTreeHelper.pineLeavesProperties.setTree(this);
		addConnectableVanillaLeaves((state) -> {
			return state.getBlock() instanceof BlockPineNeedles;
		});
	}

	
	@Override
	public void createSpecies() {
		setCommonSpecies(new PineSpeciesBase(this));
		getCommonSpecies().generateSeed();
	}

{'fraction_non_alphanumeric': 0.10119840213049268, 'fraction_numerical': 0.010652463382157125, 'mean_word_length': 5.747005988023952, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6819399', 'n_tokens_mistral': 1746, 'n_tokens_neox': 1526, 'n_words': 214}