diff --git a/src/main/java/forestry/arboriculture/gadgets/TileLeaves.java b/src/main/java/forestry/arboriculture/gadgets/TileLeaves.java index 37695f7c5..5cfc69d1c 100755 --- a/src/main/java/forestry/arboriculture/gadgets/TileLeaves.java +++ b/src/main/java/forestry/arboriculture/gadgets/TileLeaves.java @@ -31,6 +31,7 @@ import net.minecraftforge.common.EnumPlantType; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import forestry.api.arboriculture.EnumTreeChromosome; import forestry.api.arboriculture.IAlleleTreeSpecies; import forestry.api.arboriculture.IFruitProvider; import forestry.api.arboriculture.ILeafTickHandler; @@ -121,7 +122,7 @@ public class TileLeaves extends TileTreeContainer implements IPollinatable, IFru if (tree != null) { setTree(tree); } else if (speciesUID != null) { - setTree(speciesUID, false); + setTree(speciesUID, false, null); } } @@ -193,7 +194,7 @@ public class TileLeaves extends TileTreeContainer implements IPollinatable, IFru effectData = tree.doEffect(effectData, worldObj, biome.biomeID, xCoord, yCoord, zCoord); } - public void setTree(String speciesUID, boolean isPollinatedState) { + public void setTree(String speciesUID, boolean isPollinatedState, String fruitAlleleUID) { ITree tree = getTree(); if (tree != null && tree.getIdent().equals(speciesUID)) { return; @@ -201,6 +202,13 @@ public class TileLeaves extends TileTreeContainer implements IPollinatable, IFru IAllele[] treeTemplate = PluginArboriculture.treeInterface.getTemplate(speciesUID); if (treeTemplate != null) { + if (fruitAlleleUID != null) { + IAllele fruitAllele = AlleleManager.alleleRegistry.getAllele(fruitAlleleUID); + if (fruitAllele != null) { + treeTemplate[EnumTreeChromosome.FRUITS.ordinal()] = fruitAllele; + } + } + ITree newTree = PluginArboriculture.treeInterface.templateAsIndividual(treeTemplate); if (isPollinatedState) { newTree.mate(newTree); @@ -387,9 +395,10 @@ public class TileLeaves extends TileTreeContainer implements IPollinatable, IFru isPollinatedState = packet.isPollinated(); colourFruits = packet.getColourFruits(); + String fruitAlleleUID = packet.getFruitAlleleUID(); speciesUID = packet.getSpeciesUID(); - setTree(speciesUID, isPollinatedState); + setTree(speciesUID, isPollinatedState, fruitAlleleUID); worldObj.func_147479_m(xCoord, yCoord, zCoord); } diff --git a/src/main/java/forestry/arboriculture/network/PacketLeafUpdate.java b/src/main/java/forestry/arboriculture/network/PacketLeafUpdate.java index 363e0cf80..f4eae80cd 100755 --- a/src/main/java/forestry/arboriculture/network/PacketLeafUpdate.java +++ b/src/main/java/forestry/arboriculture/network/PacketLeafUpdate.java @@ -17,6 +17,7 @@ import java.io.IOException; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; +import forestry.api.arboriculture.EnumTreeChromosome; import forestry.api.arboriculture.ITree; import forestry.arboriculture.gadgets.TileLeaves; import forestry.core.network.ForestryPacket; @@ -32,6 +33,7 @@ public class PacketLeafUpdate extends ForestryPacket implements ILocatedPacket { private byte leafState = 0; private int colourFruits = -1; + private String fruitAlleleUID; private String speciesUID = ""; public PacketLeafUpdate() { @@ -47,15 +49,13 @@ public class PacketLeafUpdate extends ForestryPacket implements ILocatedPacket { leafState = 0; if (leaves.hasFruit()) { leafState |= hasFruitFlag; + fruitAlleleUID = leaves.getTree().getGenome().getActiveAllele(EnumTreeChromosome.FRUITS).getUID(); + colourFruits = leaves.getFruitColour(); } if (leaves.isPollinated()) { leafState |= isPollinatedFlag; } - if (leaves.hasFruit()) { - colourFruits = leaves.getFruitColour(); - } - ITree tree = leaves.getTree(); if (tree != null) { speciesUID = tree.getIdent(); @@ -69,7 +69,11 @@ public class PacketLeafUpdate extends ForestryPacket implements ILocatedPacket { data.writeShort(posZ); data.writeByte(leafState); data.writeUTF(speciesUID); - data.writeInt(colourFruits); + + if (isFruitLeaf()) { + data.writeUTF(fruitAlleleUID); + data.writeInt(colourFruits); + } } @Override @@ -79,9 +83,13 @@ public class PacketLeafUpdate extends ForestryPacket implements ILocatedPacket { posZ = data.readShort(); leafState = data.readByte(); speciesUID = data.readUTF(); - colourFruits = data.readInt(); - } + if (isFruitLeaf()) { + fruitAlleleUID = data.readUTF(); + colourFruits = data.readInt(); + } + } + public boolean isFruitLeaf() { return (leafState & hasFruitFlag) > 0; } @@ -90,6 +98,10 @@ public class PacketLeafUpdate extends ForestryPacket implements ILocatedPacket { return (leafState & isPollinatedFlag) > 0; } + public String getFruitAlleleUID() { + return fruitAlleleUID; + } + public int getColourFruits() { return colourFruits; } diff --git a/src/main/java/forestry/core/genetics/SpeciesRoot.java b/src/main/java/forestry/core/genetics/SpeciesRoot.java index 23b71854d..02b90f065 100755 --- a/src/main/java/forestry/core/genetics/SpeciesRoot.java +++ b/src/main/java/forestry/core/genetics/SpeciesRoot.java @@ -11,6 +11,7 @@ package forestry.core.genetics; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -61,7 +62,8 @@ public abstract class SpeciesRoot implements ISpeciesRoot { @Override public IAllele[] getTemplate(String identifier) { - return speciesTemplates.get(identifier); + IAllele[] template = speciesTemplates.get(identifier); + return Arrays.copyOf(template, template.length); } /* MUTATIONS */