Search in sources :

Example 6 with IBee

use of forestry.api.apiculture.IBee in project ForestryMC by ForestryMC.

the class BeeAlyzerPlugin method drawAnalyticsPage1.

@SideOnly(Side.CLIENT)
@Override
public void drawAnalyticsPage1(GuiScreen gui, ItemStack itemStack) {
    if (gui instanceof GuiAlyzer) {
        GuiAlyzer guiAlyzer = (GuiAlyzer) gui;
        IBee bee = BeeManager.beeRoot.getMember(itemStack);
        if (bee == null) {
            return;
        }
        EnumBeeType type = BeeManager.beeRoot.getType(itemStack);
        if (type == null) {
            return;
        }
        TextLayoutHelper textLayout = guiAlyzer.getTextLayout();
        textLayout.startPage(GuiAlyzer.COLUMN_0, GuiAlyzer.COLUMN_1, GuiAlyzer.COLUMN_2);
        textLayout.drawLine(Translator.translateToLocal("for.gui.active"), GuiAlyzer.COLUMN_1);
        textLayout.drawLine(Translator.translateToLocal("for.gui.inactive"), GuiAlyzer.COLUMN_2);
        textLayout.newLine();
        textLayout.newLine();
        {
            String customPrimaryBeeKey = "for.bees.custom.beealyzer." + type.getName() + "." + bee.getGenome().getPrimary().getUnlocalizedName().replace("bees.species.", "");
            String customSecondaryBeeKey = "for.bees.custom.beealyzer." + type.getName() + "." + bee.getGenome().getSecondary().getUnlocalizedName().replace("bees.species.", "");
            guiAlyzer.drawSpeciesRow(Translator.translateToLocal("for.gui.species"), bee, EnumBeeChromosome.SPECIES, GuiAlyzer.checkCustomName(customPrimaryBeeKey), GuiAlyzer.checkCustomName(customSecondaryBeeKey));
            textLayout.newLine();
        }
        guiAlyzer.drawChromosomeRow(Translator.translateToLocal("for.gui.lifespan"), bee, EnumBeeChromosome.LIFESPAN);
        textLayout.newLine();
        guiAlyzer.drawChromosomeRow(Translator.translateToLocal("for.gui.speed"), bee, EnumBeeChromosome.SPEED);
        textLayout.newLine();
        guiAlyzer.drawChromosomeRow(Translator.translateToLocal("for.gui.pollination"), bee, EnumBeeChromosome.FLOWERING);
        textLayout.newLine();
        guiAlyzer.drawChromosomeRow(Translator.translateToLocal("for.gui.flowers"), bee, EnumBeeChromosome.FLOWER_PROVIDER);
        textLayout.newLine();
        textLayout.drawLine(Translator.translateToLocal("for.gui.fertility"), GuiAlyzer.COLUMN_0);
        IAlleleInteger primaryFertility = (IAlleleInteger) bee.getGenome().getActiveAllele(EnumBeeChromosome.FERTILITY);
        IAlleleInteger secondaryFertility = (IAlleleInteger) bee.getGenome().getInactiveAllele(EnumBeeChromosome.FERTILITY);
        guiAlyzer.drawFertilityInfo(primaryFertility.getValue(), GuiAlyzer.COLUMN_1, guiAlyzer.getColorCoding(primaryFertility.isDominant()), 0);
        guiAlyzer.drawFertilityInfo(secondaryFertility.getValue(), GuiAlyzer.COLUMN_2, guiAlyzer.getColorCoding(secondaryFertility.isDominant()), 0);
        textLayout.newLine();
        guiAlyzer.drawChromosomeRow(Translator.translateToLocal("for.gui.area"), bee, EnumBeeChromosome.TERRITORY);
        textLayout.newLine();
        guiAlyzer.drawChromosomeRow(Translator.translateToLocal("for.gui.effect"), bee, EnumBeeChromosome.EFFECT);
        textLayout.newLine();
        textLayout.endPage();
    }
}
Also used : TextLayoutHelper(forestry.core.gui.TextLayoutHelper) IAlleleInteger(forestry.api.genetics.IAlleleInteger) IBee(forestry.api.apiculture.IBee) GuiAlyzer(forestry.core.gui.GuiAlyzer) EnumBeeType(forestry.api.apiculture.EnumBeeType) SideOnly(net.minecraftforge.fml.relauncher.SideOnly)

Example 7 with IBee

use of forestry.api.apiculture.IBee in project ForestryMC by ForestryMC.

the class BeeAlyzerPlugin method drawAnalyticsPage2.

@SideOnly(Side.CLIENT)
@Override
public void drawAnalyticsPage2(GuiScreen gui, ItemStack itemStack) {
    if (gui instanceof GuiAlyzer) {
        GuiAlyzer guiAlyzer = (GuiAlyzer) gui;
        IBee bee = BeeManager.beeRoot.getMember(itemStack);
        if (bee == null) {
            return;
        }
        EnumBeeType type = BeeManager.beeRoot.getType(itemStack);
        TextLayoutHelper textLayout = guiAlyzer.getTextLayout();
        textLayout.startPage(GuiAlyzer.COLUMN_0, GuiAlyzer.COLUMN_1, GuiAlyzer.COLUMN_2);
        textLayout.drawLine(Translator.translateToLocal("for.gui.active"), GuiAlyzer.COLUMN_1);
        textLayout.drawLine(Translator.translateToLocal("for.gui.inactive"), GuiAlyzer.COLUMN_2);
        textLayout.newLine();
        guiAlyzer.drawRow(Translator.translateToLocal("for.gui.climate"), AlleleManager.climateHelper.toDisplay(bee.getGenome().getPrimary().getTemperature()), AlleleManager.climateHelper.toDisplay(bee.getGenome().getSecondary().getTemperature()), bee, EnumBeeChromosome.SPECIES);
        textLayout.newLine();
        IAlleleTolerance tempToleranceActive = (IAlleleTolerance) bee.getGenome().getActiveAllele(EnumBeeChromosome.TEMPERATURE_TOLERANCE);
        IAlleleTolerance tempToleranceInactive = (IAlleleTolerance) bee.getGenome().getInactiveAllele(EnumBeeChromosome.TEMPERATURE_TOLERANCE);
        textLayout.drawLine("  " + Translator.translateToLocal("for.gui.tolerance"), GuiAlyzer.COLUMN_0);
        guiAlyzer.drawToleranceInfo(tempToleranceActive, GuiAlyzer.COLUMN_1);
        guiAlyzer.drawToleranceInfo(tempToleranceInactive, GuiAlyzer.COLUMN_2);
        textLayout.newLine(16);
        guiAlyzer.drawRow(Translator.translateToLocal("for.gui.humidity"), AlleleManager.climateHelper.toDisplay(bee.getGenome().getPrimary().getHumidity()), AlleleManager.climateHelper.toDisplay(bee.getGenome().getSecondary().getHumidity()), bee, EnumBeeChromosome.SPECIES);
        textLayout.newLine();
        IAlleleTolerance humidToleranceActive = (IAlleleTolerance) bee.getGenome().getActiveAllele(EnumBeeChromosome.HUMIDITY_TOLERANCE);
        IAlleleTolerance humidToleranceInactive = (IAlleleTolerance) bee.getGenome().getInactiveAllele(EnumBeeChromosome.HUMIDITY_TOLERANCE);
        textLayout.drawLine("  " + Translator.translateToLocal("for.gui.tolerance"), GuiAlyzer.COLUMN_0);
        guiAlyzer.drawToleranceInfo(humidToleranceActive, GuiAlyzer.COLUMN_1);
        guiAlyzer.drawToleranceInfo(humidToleranceInactive, GuiAlyzer.COLUMN_2);
        textLayout.newLine(16);
        String yes = Translator.translateToLocal("for.yes");
        String no = Translator.translateToLocal("for.no");
        String diurnal0, diurnal1, nocturnal0, nocturnal1;
        if (bee.getGenome().getNeverSleeps()) {
            nocturnal0 = diurnal0 = yes;
        } else {
            nocturnal0 = bee.getGenome().getPrimary().isNocturnal() ? yes : no;
            diurnal0 = !bee.getGenome().getPrimary().isNocturnal() ? yes : no;
        }
        if (((AlleleBoolean) bee.getGenome().getInactiveAllele(EnumBeeChromosome.NEVER_SLEEPS)).getValue()) {
            nocturnal1 = diurnal1 = yes;
        } else {
            nocturnal1 = bee.getGenome().getSecondary().isNocturnal() ? yes : no;
            diurnal1 = !bee.getGenome().getSecondary().isNocturnal() ? yes : no;
        }
        textLayout.drawLine(Translator.translateToLocal("for.gui.diurnal"), GuiAlyzer.COLUMN_0);
        textLayout.drawLine(diurnal0, GuiAlyzer.COLUMN_1, guiAlyzer.getColorCoding(false));
        textLayout.drawLine(diurnal1, GuiAlyzer.COLUMN_2, guiAlyzer.getColorCoding(false));
        textLayout.newLineCompressed();
        textLayout.drawLine(Translator.translateToLocal("for.gui.nocturnal"), GuiAlyzer.COLUMN_0);
        textLayout.drawLine(nocturnal0, GuiAlyzer.COLUMN_1, guiAlyzer.getColorCoding(false));
        textLayout.drawLine(nocturnal1, GuiAlyzer.COLUMN_2, guiAlyzer.getColorCoding(false));
        textLayout.newLineCompressed();
        String primary = StringUtil.readableBoolean(bee.getGenome().getToleratesRain(), yes, no);
        String secondary = StringUtil.readableBoolean(((AlleleBoolean) bee.getGenome().getInactiveAllele(EnumBeeChromosome.TOLERATES_RAIN)).getValue(), yes, no);
        guiAlyzer.drawRow(Translator.translateToLocal("for.gui.flyer"), primary, secondary, bee, EnumBeeChromosome.TOLERATES_RAIN);
        textLayout.newLineCompressed();
        primary = StringUtil.readableBoolean(bee.getGenome().getCaveDwelling(), yes, no);
        secondary = StringUtil.readableBoolean(((AlleleBoolean) bee.getGenome().getInactiveAllele(EnumBeeChromosome.CAVE_DWELLING)).getValue(), yes, no);
        guiAlyzer.drawRow(Translator.translateToLocal("for.gui.cave"), primary, secondary, bee, EnumBeeChromosome.CAVE_DWELLING);
        textLayout.newLine();
        String displayText;
        if (type == EnumBeeType.PRINCESS || type == EnumBeeType.QUEEN) {
            String displayTextKey = "for.bees.stock.pristine";
            if (!bee.isNatural()) {
                displayTextKey = "for.bees.stock.ignoble";
            }
            displayText = Translator.translateToLocal(displayTextKey);
            textLayout.drawCenteredLine(displayText, 8, 208, guiAlyzer.getFontColor().get("gui.beealyzer.binomial"));
        }
        if (bee.getGeneration() >= 0) {
            textLayout.newLineCompressed();
            displayText = Translator.translateToLocalFormatted("for.gui.beealyzer.generations", bee.getGeneration());
            textLayout.drawCenteredLine(displayText, 8, 208, guiAlyzer.getFontColor().get("gui.beealyzer.binomial"));
        }
        textLayout.endPage();
    }
}
Also used : TextLayoutHelper(forestry.core.gui.TextLayoutHelper) IAlleleTolerance(forestry.api.genetics.IAlleleTolerance) IBee(forestry.api.apiculture.IBee) GuiAlyzer(forestry.core.gui.GuiAlyzer) EnumBeeType(forestry.api.apiculture.EnumBeeType) AlleleBoolean(forestry.core.genetics.alleles.AlleleBoolean) SideOnly(net.minecraftforge.fml.relauncher.SideOnly)

Example 8 with IBee

use of forestry.api.apiculture.IBee in project ForestryMC by ForestryMC.

the class WorldgenBeekeepingLogic method canWork.

/* UPDATING */
@Override
public boolean canWork() {
    tickHelper.onTick();
    IBee queen = housing.getContainedBee();
    hasFlowersCache.update(queen, housing);
    if (tickHelper.updateOnInterval(200)) {
        World world = housing.getWorldObj();
        boolean canWork = (world.isDaytime() || queen.getGenome().getNeverSleeps()) && (!housing.isRaining() || queen.getGenome().getToleratesRain());
        boolean flowerCacheNeedsSync = hasFlowersCache.needsSync();
        if (active != canWork) {
            setActive(canWork);
        } else if (flowerCacheNeedsSync) {
            syncToClient();
        }
    }
    return active;
}
Also used : IBee(forestry.api.apiculture.IBee) World(net.minecraft.world.World)

Example 9 with IBee

use of forestry.api.apiculture.IBee in project ForestryMC by ForestryMC.

the class BlockBeeHives method getDrops.

@Override
public void getDrops(NonNullList<ItemStack> drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
    Random random = world instanceof World ? ((World) world).rand : RANDOM;
    List<IHiveDrop> hiveDrops = getDropsForHive(getMetaFromState(state));
    Collections.shuffle(hiveDrops);
    // Grab a princess
    int tries = 0;
    boolean hasPrincess = false;
    while (tries <= 10 && !hasPrincess) {
        tries++;
        for (IHiveDrop drop : hiveDrops) {
            if (random.nextDouble() < drop.getChance(world, pos, fortune)) {
                IBee bee = drop.getBeeType(world, pos);
                if (random.nextFloat() < drop.getIgnobleChance(world, pos, fortune)) {
                    bee.setIsNatural(false);
                }
                ItemStack princess = BeeManager.beeRoot.getMemberStack(bee, EnumBeeType.PRINCESS);
                drops.add(princess);
                hasPrincess = true;
                break;
            }
        }
    }
    // Grab drones
    for (IHiveDrop drop : hiveDrops) {
        if (random.nextDouble() < drop.getChance(world, pos, fortune)) {
            IBee bee = drop.getBeeType(world, pos);
            ItemStack drone = BeeManager.beeRoot.getMemberStack(bee, EnumBeeType.DRONE);
            drops.add(drone);
            break;
        }
    }
    // Grab anything else on offer
    for (IHiveDrop drop : hiveDrops) {
        if (random.nextDouble() < drop.getChance(world, pos, fortune)) {
            drops.addAll(drop.getExtraItems(world, pos, fortune));
            break;
        }
    }
}
Also used : Random(java.util.Random) IHiveDrop(forestry.api.apiculture.IHiveDrop) IBee(forestry.api.apiculture.IBee) World(net.minecraft.world.World) ItemStack(net.minecraft.item.ItemStack)

Example 10 with IBee

use of forestry.api.apiculture.IBee in project ForestryMC by ForestryMC.

the class BeekeepingLogic method spawnOffspring.

/**
 * Creates the succeeding princess and between one and three drones.
 */
private static Collection<ItemStack> spawnOffspring(IBee queen, IBeeHousing beeHousing) {
    World world = beeHousing.getWorldObj();
    Stack<ItemStack> offspring = new Stack<>();
    IApiaristTracker breedingTracker = BeeManager.beeRoot.getBreedingTracker(world, beeHousing.getOwner());
    // Princess
    boolean secondPrincess = world.rand.nextInt(10000) < ModuleApiculture.getSecondPrincessChance() * 100;
    int count = secondPrincess ? 2 : 1;
    while (count > 0) {
        count--;
        IBee heiress = queen.spawnPrincess(beeHousing);
        if (heiress != null) {
            ItemStack princess = BeeManager.beeRoot.getMemberStack(heiress, EnumBeeType.PRINCESS);
            breedingTracker.registerPrincess(heiress);
            offspring.push(princess);
        }
    }
    // Drones
    List<IBee> drones = queen.spawnDrones(beeHousing);
    for (IBee drone : drones) {
        ItemStack droneStack = BeeManager.beeRoot.getMemberStack(drone, EnumBeeType.DRONE);
        breedingTracker.registerDrone(drone);
        offspring.push(droneStack);
    }
    IBeeHousingInventory beeInventory = beeHousing.getBeeInventory();
    Collection<ItemStack> spawn = new ArrayList<>();
    while (!offspring.isEmpty()) {
        ItemStack spawned = offspring.pop();
        if (!beeInventory.addProduct(spawned, true)) {
            spawn.add(spawned);
        }
    }
    return spawn;
}
Also used : IBeeHousingInventory(forestry.api.apiculture.IBeeHousingInventory) ArrayList(java.util.ArrayList) IApiaristTracker(forestry.api.apiculture.IApiaristTracker) IBee(forestry.api.apiculture.IBee) World(net.minecraft.world.World) ItemStack(net.minecraft.item.ItemStack) Stack(java.util.Stack) ItemStack(net.minecraft.item.ItemStack)

Aggregations

IBee (forestry.api.apiculture.IBee)33 ItemStack (net.minecraft.item.ItemStack)17 IBeeGenome (forestry.api.apiculture.IBeeGenome)7 EnumBeeType (forestry.api.apiculture.EnumBeeType)6 World (net.minecraft.world.World)6 NBTTagCompound (net.minecraft.nbt.NBTTagCompound)5 SideOnly (net.minecraftforge.fml.relauncher.SideOnly)4 IBeeHousingInventory (forestry.api.apiculture.IBeeHousingInventory)3 IBeeRoot (forestry.api.apiculture.IBeeRoot)3 IAllele (forestry.api.genetics.IAllele)3 GuiAlyzer (forestry.core.gui.GuiAlyzer)3 TextLayoutHelper (forestry.core.gui.TextLayoutHelper)3 ArrayList (java.util.ArrayList)3 IBeekeepingMode (forestry.api.apiculture.IBeekeepingMode)2 IHiveDrop (forestry.api.apiculture.IHiveDrop)2 IHiveFrame (forestry.api.apiculture.IHiveFrame)2 IChromosome (forestry.api.genetics.IChromosome)2 Random (java.util.Random)2 Item (net.minecraft.item.Item)2 IncubatorRecipe (binnie.genetics.machine.incubator.IncubatorRecipe)1