Compare commits

...
4 Commits
6 changed files with 95 additions and 52 deletions

No files matched your search

@@ -11,6 +11,8 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IIcon;
@@ -19,18 +21,25 @@ import net.minecraft.world.World;
import binnie.Binnie;
import binnie.botany.Botany;
import binnie.botany.CreativeTabBotany;
import binnie.botany.api.EnumFlowerChromosome;
import binnie.botany.api.EnumFlowerStage;
import binnie.botany.api.IAlleleFlowerSpecies;
import binnie.botany.api.IFlower;
import binnie.botany.api.IFlowerColor;
import binnie.botany.api.IFlowerGenome;
import binnie.botany.api.IFlowerType;
import binnie.botany.core.BotanyCore;
import binnie.botany.genetics.AlleleColor;
import binnie.botany.genetics.EnumFlowerColor;
import binnie.botany.genetics.EnumFlowerType;
import binnie.botany.genetics.Flower;
import binnie.botany.genetics.FlowerSpecies;
import binnie.core.BinnieCore;
import binnie.core.util.I18N;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import forestry.api.genetics.AlleleManager;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IIndividual;
import forestry.api.genetics.IPollinatable;
import forestry.core.config.Config;
@@ -61,12 +70,44 @@ public abstract class ItemBotany extends Item {
return false;
}
static IAllele getRenderAllele(ItemStack stack, EnumFlowerChromosome chromosome, boolean active) {
if (stack == null || !stack.hasTagCompound()) return null;
NBTTagCompound genome = stack.getTagCompound().getCompoundTag("Genome");
NBTTagList chromosomes = genome.getTagList("Chromosomes", 10);
int slot = chromosome.ordinal();
NBTTagCompound chromosomeTag = null;
for (int index = chromosomes.tagCount() - 1; index >= 0; index--) {
NBTTagCompound candidate = chromosomes.getCompoundTagAt(index);
if (candidate.getByte("Slot") == slot) {
chromosomeTag = candidate;
break;
}
}
if (chromosomeTag == null) return null;
Class<? extends IAllele> alleleClass = chromosome.getAlleleClass();
IAllele primary = AlleleManager.alleleRegistry.getAllele(chromosomeTag.getString("UID0"));
if (!alleleClass.isInstance(primary)) return null;
IAllele secondary = AlleleManager.alleleRegistry.getAllele(chromosomeTag.getString("UID1"));
if (!alleleClass.isInstance(secondary)) return null;
if (!active) return primary;
if (primary.isDominant()) return primary;
return secondary.isDominant() ? secondary : primary;
}
@Override
public boolean hasEffect(ItemStack stack, int pass) {
if (!stack.hasTagCompound()) {
return false;
}
IAllele allele = getRenderAllele(stack, EnumFlowerChromosome.SPECIES, false);
if (allele instanceof IAlleleFlowerSpecies species) {
return species.hasEffect();
}
IIndividual individual = getIndividual(stack);
return individual != null && individual.getGenome() != null && individual.hasEffect();
}
@@ -152,6 +193,17 @@ public abstract class ItemBotany extends Item {
@Override
public int getColorFromItemStack(ItemStack itemstack, int renderPass) {
if (!itemstack.hasTagCompound()) {
return (renderPass == 0 ? EnumFlowerColor.GREEN : EnumFlowerColor.RED).getColor(false);
}
EnumFlowerChromosome chromosome = renderPass == 0 ? EnumFlowerChromosome.STEM
: renderPass == 1 ? EnumFlowerChromosome.PRIMARY : EnumFlowerChromosome.SECONDARY;
IAllele allele = getRenderAllele(itemstack, chromosome, true);
if (allele instanceof AlleleColor color) {
return color.getColor().getColor(itemstack.getTagCompound().getBoolean("Wilt"));
}
IFlower flower = BotanyCore.speciesRoot.getMember(itemstack);
if (flower == null || flower.getGenome() == null) {
return 0xffffff;
@@ -177,19 +229,32 @@ public abstract class ItemBotany extends Item {
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(ItemStack itemstack, int renderPass) {
IFlower flower = BotanyCore.speciesRoot.getMember(itemstack);
if (flower == null || flower.getGenome() == null || flower.getGenome().getPrimary() == null) {
return EnumFlowerType.ALLIUM.getBlank();
IAlleleFlowerSpecies species = FlowerSpecies.POPPY;
boolean flowered = false;
if (itemstack.hasTagCompound()) {
IAllele allele = getRenderAllele(itemstack, EnumFlowerChromosome.SPECIES, false);
if (allele instanceof IAlleleFlowerSpecies flowerSpecies) {
species = flowerSpecies;
flowered = itemstack.getTagCompound().getBoolean("Flowered");
} else {
IFlower flower = BotanyCore.speciesRoot.getMember(itemstack);
if (flower == null || flower.getGenome() == null || flower.getGenome().getPrimary() == null) {
return EnumFlowerType.ALLIUM.getBlank();
}
species = flower.getGenome().getPrimary();
flowered = flower.hasFlowered();
}
}
IFlowerType type = flower.getGenome().getPrimary().getType();
IFlowerType type = species.getType();
if (renderPass == 0) {
return type.getStem(getStage(), flower.hasFlowered(), type.getSections() - 1);
return type.getStem(getStage(), flowered, type.getSections() - 1);
}
if (renderPass == 1) {
return type.getPetalIcon(getStage(), flower.hasFlowered(), type.getSections() - 1);
return type.getPetalIcon(getStage(), flowered, type.getSections() - 1);
}
return type.getVariantIcon(getStage(), flower.hasFlowered(), type.getSections() - 1);
return type.getVariantIcon(getStage(), flowered, type.getSections() - 1);
}
@Override
@@ -8,7 +8,13 @@ import forestry.core.genetics.alleles.EnumAllele;
public class FlowerTemplates {
private static IAllele[] defaultTemplate;
public static IAllele[] getDefaultTemplate() {
if (defaultTemplate != null) {
return defaultTemplate.clone();
}
IAllele[] alleles = new IAllele[EnumFlowerChromosome.VALUES.length];
alleles[EnumFlowerChromosome.SPECIES.ordinal()] = FlowerSpecies.POPPY;
alleles[EnumFlowerChromosome.PRIMARY.ordinal()] = AlleleHelper.getAllele(EnumFlowerColor.RED);
@@ -22,6 +28,13 @@ public class FlowerTemplates {
alleles[EnumFlowerChromosome.PH_TOLERANCE.ordinal()] = AlleleHelper.getAllele(EnumTolerance.NONE);
alleles[EnumFlowerChromosome.SAPPINESS.ordinal()] = AlleleHelper.getAllele(EnumAllele.Sappiness.AVERAGE);
alleles[EnumFlowerChromosome.STEM.ordinal()] = AlleleHelper.getAllele(EnumFlowerColor.GREEN);
return alleles;
for (IAllele allele : alleles) {
// Do not cache a partial template during registry initialization.
if (allele == null) return alleles;
}
defaultTemplate = alleles;
return defaultTemplate.clone();
}
}
@@ -94,6 +94,7 @@ public class GuiCraftGUI extends GuiContainer {
GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT);
window.render();
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
RenderHelper.enableGUIStandardItemLighting();
NEIHook.renderObjects(window, mouseX, mouseY);
@@ -33,7 +33,6 @@ import binnie.extrabees.genetics.ExtraBeesFlowers;
import cofh.api.energy.IEnergyReceiver;
import forestry.api.apiculture.BeeManager;
import forestry.api.apiculture.IAlleleBeeEffect;
import forestry.api.apiculture.IArmorApiarist;
import forestry.api.apiculture.IBeeGenome;
import forestry.api.apiculture.IBeeHousing;
import forestry.api.genetics.AlleleManager;
@@ -111,43 +110,6 @@ public enum ExtraBeesEffect implements IAlleleBeeEffect {
}
}
public static boolean wearsHelmet(EntityPlayer player) {
ItemStack armorItem = player.inventory.armorInventory[3];
return armorItem != null && armorItem.getItem() instanceof IArmorApiarist;
}
public static boolean wearsChest(EntityPlayer player) {
ItemStack armorItem = player.inventory.armorInventory[2];
return armorItem != null && armorItem.getItem() instanceof IArmorApiarist;
}
public static boolean wearsLegs(EntityPlayer player) {
ItemStack armorItem = player.inventory.armorInventory[1];
return armorItem != null && armorItem.getItem() instanceof IArmorApiarist;
}
public static boolean wearsBoots(EntityPlayer player) {
ItemStack armorItem = player.inventory.armorInventory[0];
return armorItem != null && armorItem.getItem() instanceof IArmorApiarist;
}
public static int wearsItems(EntityPlayer player) {
int count = 0;
if (wearsHelmet(player)) {
count++;
}
if (wearsChest(player)) {
count++;
}
if (wearsLegs(player)) {
count++;
}
if (wearsBoots(player)) {
count++;
}
return count;
}
public void register() {
AlleleManager.alleleRegistry.registerAllele(this);
}
@@ -371,7 +333,7 @@ public enum ExtraBeesEffect implements IAlleleBeeEffect {
for (EntityLivingBase entity : getEntities(EntityLivingBase.class, genome, housing)) {
int damage = 4;
if (entity instanceof EntityPlayer) {
int count = wearsItems((EntityPlayer) entity);
int count = BeeManager.armorApiaristHelper.wearsItems(entity, getUID(), true);
if (count > 3) {
continue;
}
@@ -396,7 +358,8 @@ public enum ExtraBeesEffect implements IAlleleBeeEffect {
private void onHungerEffect(IBeeGenome genome, IBeeHousing housing, World world) {
for (EntityPlayer player : getEntities(EntityPlayer.class, genome, housing)) {
if (world.rand.nextInt(4) < wearsItems(player)) {
if (world.rand.nextInt(4)
< BeeManager.armorApiaristHelper.wearsItems((EntityLivingBase) player, getUID(), true)) {
continue;
}
player.addExhaustion(4.0f);
@@ -406,7 +369,8 @@ public enum ExtraBeesEffect implements IAlleleBeeEffect {
private void onPotionEffect(IBeeGenome genome, IBeeHousing housing, World world, PotionEffect potion) {
for (EntityPlayer player : getEntities(EntityPlayer.class, genome, housing)) {
if (world.rand.nextInt(4) < wearsItems(player)) {
if (world.rand.nextInt(4)
< BeeManager.armorApiaristHelper.wearsItems((EntityLivingBase) player, getUID(), true)) {
continue;
}
player.addPotionEffect(potion);
@@ -366,7 +366,7 @@ for.extratrees.item.food.gooseberry=Gooseberry
for.extratrees.item.food.goldenraspberry=Golden Raspberry
for.extratrees.item.food.coconut=Coconut
for.extratrees.item.food.cashew=Cashew
for.extratrees.item.food.avacado=Avacado
for.extratrees.item.food.avacado=Avocado
for.extratrees.item.food.nutmeg=Nutmeg
for.extratrees.item.food.allspice=Allspice
for.extratrees.item.food.chilli=Chilli
@@ -282,7 +282,7 @@ extratrees.species.goldenraspberry.name=Golden Raspberry
extratrees.species.cinnamon.name=Cinnamon
extratrees.species.coconut.name=Coconut
extratrees.species.cashew.name=Cashew
extratrees.species.avacado.name=Avacado
extratrees.species.avacado.name=Avocado
extratrees.species.nutmeg.name=Nutmeg
extratrees.species.allspice.name=Allspice
extratrees.species.chilli.name=Chilli Pepper
@@ -386,7 +386,7 @@ for.extratrees.item.food.gooseberry=Gooseberry
for.extratrees.item.food.goldenraspberry=Golden Raspberry
for.extratrees.item.food.coconut=Coconut
for.extratrees.item.food.cashew=Cashew
for.extratrees.item.food.avacado=Avacado
for.extratrees.item.food.avacado=Avocado
for.extratrees.item.food.nutmeg=Nutmeg
for.extratrees.item.food.allspice=Allspice
for.extratrees.item.food.chilli=Chilli