@Override public Map<ItemStack, Float> getSpecialties() { return genome.getFruitProvider().getSpecialty(); }
@Override public NonNullList<ItemStack> produceStacks(World world, BlockPos pos, int ripeningTime) { return genome.getFruitProvider().getFruits(genome, world, pos, ripeningTime); } }
@Override public Map<ItemStack, Float> getProducts() { return genome.getFruitProvider().getProducts(); }
@Override public boolean canBearFruit() { return genome.getPrimary().getSuitableFruit().contains(genome.getFruitProvider().getFamily()); }
@Override public IFruitFamily getFruitFamily() { ITree tree = getTree(); if (tree == null) { return EnumFruitFamily.NONE; } return tree.getGenome().getFruitProvider().getFamily(); }
@Override public boolean allowsFruitBlocks() { IFruitProvider provider = getGenome().getFruitProvider(); if (!provider.requiresFruitBlocks()) { return false; } Collection<IFruitFamily> suitable = genome.getPrimary().getSuitableFruit(); return suitable.contains(provider.getFamily()); }
@Override public boolean trySpawnFruitBlock(World world, Random rand, BlockPos pos) { IFruitProvider provider = getGenome().getFruitProvider(); Collection<IFruitFamily> suitable = genome.getPrimary().getSuitableFruit(); return suitable.contains(provider.getFamily()) && provider.trySpawnFruitBlock(getGenome(), world, rand, pos); }
@Override @SideOnly(Side.CLIENT) public int colorMultiplier(IBlockState state, @Nullable IBlockAccess worldIn, @Nullable BlockPos pos, int tintIndex) { TreeDefinition treeDefinition = state.getValue(getVariant()); ITreeGenome genome = treeDefinition.getGenome(); if (tintIndex == BlockAbstractLeaves.FRUIT_COLOR_INDEX) { IFruitProvider fruitProvider = genome.getFruitProvider(); return fruitProvider.getDecorativeColor(); } ILeafSpriteProvider spriteProvider = genome.getPrimary().getLeafSpriteProvider(); return spriteProvider.getColor(false); } }
@Override public Collection<IAlleleSpecies> getTreesThatBearFruit(final ItemStack fruit, final boolean master, final World world, final GameProfile player) { final Collection<IAlleleSpecies> set = master ? this.getAllSpecies() : this.getDiscoveredSpecies(world, player); final List<IAlleleSpecies> found = new ArrayList<>(); for (final IAlleleSpecies species : set) { final IAlleleTreeSpecies tSpecies = (IAlleleTreeSpecies) species; final ITreeGenome genome = (ITreeGenome) this.getSpeciesRoot().templateAsGenome(this.getSpeciesRoot().getTemplate(tSpecies)); for (final ItemStack fruit2 : genome.getFruitProvider().getProducts().keySet()) { if (fruit2.isItemEqual(fruit)) { found.add(species); } } } return found; }
@Override @SideOnly(Side.CLIENT) public int colorMultiplier(IBlockState state, @Nullable IBlockAccess worldIn, @Nullable BlockPos pos, int tintIndex) { PropertyTreeTypeFruit.LeafVariant variant = getLeafVariant(state); TreeDefinition treeDefinition; if (variant != null) { treeDefinition = variant.definition; } else { treeDefinition = TreeDefinition.Oak; } ITreeGenome genome = treeDefinition.getGenome(); if (tintIndex == BlockAbstractLeaves.FRUIT_COLOR_INDEX) { IFruitProvider fruitProvider = genome.getFruitProvider(); return fruitProvider.getDecorativeColor(); } ILeafSpriteProvider spriteProvider = genome.getPrimary().getLeafSpriteProvider(); return spriteProvider.getColor(false); } }
@Override @SideOnly(Side.CLIENT) public int colorMultiplier(IBlockState state, @Nullable IBlockAccess worldIn, @Nullable BlockPos pos, int tintIndex) { ETTreeDefinition treeDefinition = state.getValue(getVariant()); ITreeGenome genome = treeDefinition.getGenome(); if (tintIndex == BlockAbstractLeaves.FOLIAGE_COLOR_INDEX) { return genome.getPrimary().getLeafSpriteProvider().getColor(false); } else { IFruitProvider fruitProvider = genome.getFruitProvider(); return fruitProvider.getDecorativeColor(); } } }
private int determineFruitColour() { ITree tree = getTree(); if (tree == null) { tree = TreeDefinition.Cherry.getIndividual(); } ITreeGenome genome = tree.getGenome(); IFruitProvider fruit = genome.getFruitProvider(); return fruit.getColour(genome, world, getPos(), getRipeningTime()); }
@Override public void postInit() { IFarmProperties orchardFarm = FarmRegistry.getInstance().getProperties(ForestryFarmIdentifier.ORCHARD); if (orchardFarm != null && ModuleHelper.isEnabled(ForestryModuleUids.ARBORICULTURE)) { ITreeRoot treeRoot = TreeManager.treeRoot; if (treeRoot != null) { for (ITree tree : treeRoot.getIndividualTemplates()) { IFruitProvider fruitProvider = tree.getGenome().getFruitProvider(); if (fruitProvider != AlleleFruits.fruitNone.getProvider()) { orchardFarm.addGermlings(treeRoot.getMemberStack(tree, EnumGermlingType.SAPLING)); orchardFarm.addProducts(fruitProvider.getProducts().keySet()); orchardFarm.addProducts(fruitProvider.getSpecialty().keySet()); } } } } }
@Override @SideOnly(Side.CLIENT) public int getColorFromItemstack(ItemStack itemStack, int renderPass) { int meta = itemStack.getMetadata(); BlockDecorativeLeaves block = getBlock(); TreeDefinition treeDefinition = block.getTreeType(meta); ITreeGenome genome = treeDefinition.getGenome(); if (renderPass == BlockAbstractLeaves.FRUIT_COLOR_INDEX) { IFruitProvider fruitProvider = genome.getFruitProvider(); return fruitProvider.getDecorativeColor(); } return genome.getPrimary().getLeafSpriteProvider().getColor(false); } }
@Override public final void calculateArrays() { super.calculateArrays(); for (final IAlleleSpecies species : this.allActiveSpecies) { final IAlleleTreeSpecies tSpecies = (IAlleleTreeSpecies) species; final ITreeGenome genome = (ITreeGenome) this.getSpeciesRoot().templateAsGenome(this.getSpeciesRoot().getTemplate(tSpecies)); IAlleleTreeSpecies treeSpecies = genome.getPrimary(); final ItemStack wood = treeSpecies.getWoodProvider().getWoodStack(); if (!wood.isEmpty()) { this.allWoods.add(wood); } /*for (final ItemStack wood : tSpecies.getRoot().templateAsIndividual(getSpeciesRoot().getTemplate(tSpecies.getUID())).getProduceList()) { this.allWoods.add(wood); }*/ this.allFruits.addAll(genome.getFruitProvider().getProducts().keySet()); } }
@Override @SideOnly(Side.CLIENT) public int getColorFromItemstack(ItemStack itemStack, int renderPass) { int meta = itemStack.getMetadata(); BlockETDecorativeLeaves block = getBlock(); ETTreeDefinition treeDefinition = block.getTreeType(meta); if (treeDefinition == null) { return ModuleArboriculture.proxy.getFoliageColorBasic(); } ITreeGenome genome = treeDefinition.getGenome(); if (renderPass == 0) { return genome.getPrimary().getLeafSpriteProvider().getColor(false); } else { IFruitProvider fruitProvider = genome.getFruitProvider(); return fruitProvider.getDecorativeColor(); } } }
@Override public void onSyncBreedingTracker(final IBreedingTracker tracker) { this.discoveredFruits.clear(); this.discoveredWoods.clear(); for (final IAlleleSpecies species : this.getDiscoveredSpecies(tracker)) { final IAlleleTreeSpecies tSpecies = (IAlleleTreeSpecies) species; final ITreeGenome genome = (ITreeGenome) this.getSpeciesRoot().templateAsGenome(this.getSpeciesRoot().getTemplate(tSpecies)); IAlleleTreeSpecies treeSpecies = genome.getPrimary(); final ItemStack wood = treeSpecies.getWoodProvider().getWoodStack(); if (!wood.isEmpty()) { this.discoveredWoods.add(wood); } /*for (final ItemStack wood : tSpecies.getRoot().templateAsIndividual(getSpeciesRoot().getTemplate(tSpecies.getUID())).getProduceList()) { this.discoveredWoods.add(wood); }*/ this.discoveredFruits.addAll(genome.getFruitProvider().getProducts().keySet()); } }
@Override public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { ItemStack mainHand = player.getHeldItem(EnumHand.MAIN_HAND); ItemStack offHand = player.getHeldItem(EnumHand.OFF_HAND); if (mainHand.isEmpty() && offHand.isEmpty()) { ITree tree = getTree(world, pos); if (tree == null) { return false; } IFruitProvider fruitProvider = tree.getGenome().getFruitProvider(); NonNullList<ItemStack> products = tree.produceStacks(world, pos, fruitProvider.getRipeningPeriod()); world.setBlockState(pos, ModuleArboriculture.getBlocks().getDefaultLeaves(tree.getIdent()), 2); for (ItemStack fruit : products) { ItemHandlerHelper.giveItemToPlayer(player, fruit); } return true; } return false; }
@Override protected void bakeBlock(BlockDecorativeLeaves block, Key key, IModelBaker baker, boolean inventory) { TreeDefinition treeDefinition = key.definition; TextureMap map = Minecraft.getMinecraft().getTextureMapBlocks(); ITreeGenome genome = treeDefinition.getGenome(); IAlleleTreeSpecies species = genome.getPrimary(); ILeafSpriteProvider leafSpriteProvider = species.getLeafSpriteProvider(); ResourceLocation leafSpriteLocation = leafSpriteProvider.getSprite(false, key.fancy); TextureAtlasSprite leafSprite = map.getAtlasSprite(leafSpriteLocation.toString()); // Render the plain leaf block. baker.addBlockModel(null, leafSprite, BlockAbstractLeaves.FOLIAGE_COLOR_INDEX); // Render overlay for fruit leaves. ResourceLocation fruitSpriteLocation = genome.getFruitProvider().getDecorativeSprite(); if (fruitSpriteLocation != null) { TextureAtlasSprite fruitSprite = map.getAtlasSprite(fruitSpriteLocation.toString()); baker.addBlockModel(null, fruitSprite, BlockAbstractLeaves.FRUIT_COLOR_INDEX); } // Set the particle sprite baker.setParticleSprite(leafSprite); }
@Override protected void bakeBlock(BlockDefaultLeavesFruit block, Key key, IModelBaker baker, boolean inventory) { TreeDefinition treeDefinition = key.definition; TextureMap map = Minecraft.getMinecraft().getTextureMapBlocks(); ITreeGenome genome = treeDefinition.getGenome(); IAlleleTreeSpecies species = genome.getPrimary(); ILeafSpriteProvider leafSpriteProvider = species.getLeafSpriteProvider(); ResourceLocation leafSpriteLocation = leafSpriteProvider.getSprite(false, key.fancy); TextureAtlasSprite leafSprite = map.getAtlasSprite(leafSpriteLocation.toString()); // Render the plain leaf block. baker.addBlockModel(null, leafSprite, BlockAbstractLeaves.FOLIAGE_COLOR_INDEX); // Render overlay for fruit leaves. ResourceLocation fruitSpriteLocation = genome.getFruitProvider().getDecorativeSprite(); if (fruitSpriteLocation != null) { TextureAtlasSprite fruitSprite = map.getAtlasSprite(fruitSpriteLocation.toString()); baker.addBlockModel(null, fruitSprite, BlockAbstractLeaves.FRUIT_COLOR_INDEX); } // Set the particle sprite baker.setParticleSprite(leafSprite); }