#561 Use less network data for saplings

This commit is contained in:
mezz committed 2015-03-24 23:02:48 -07:00
1 parent e8c2223f01
commit ce3d891eaa
8 files changed
+189 -99

No files matched your search

@@ -17,8 +17,10 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import forestry.arboriculture.gadgets.TileLeaves;
import forestry.arboriculture.network.PacketLeafUpdate;
import forestry.arboriculture.gadgets.TileSapling;
import forestry.arboriculture.network.PacketLeaf;
import forestry.arboriculture.network.PacketRipeningUpdate;
import forestry.arboriculture.network.PacketSapling;
import forestry.core.interfaces.IPacketHandler;
import forestry.core.network.PacketIds;
import forestry.core.proxy.Proxies;
@@ -29,10 +31,16 @@ public class PacketHandlerArboriculture implements IPacketHandler {
public boolean onPacketData(int packetID, DataInputStream data, EntityPlayer player) throws IOException {
switch (packetID) {
case PacketIds.LEAF_UPDATE: {
PacketLeafUpdate packet = new PacketLeafUpdate();
case PacketIds.SAPLING: {
PacketSapling packet = new PacketSapling();
packet.readData(data);
onLeafUpdate(packet);
onSaplingPacket(packet);
return true;
}
case PacketIds.LEAF: {
PacketLeaf packet = new PacketLeaf();
packet.readData(data);
onLeafPacket(packet);
return true;
}
case PacketIds.RIPENING_UPDATE: {
@@ -46,7 +54,14 @@ public class PacketHandlerArboriculture implements IPacketHandler {
return false;
}
private void onLeafUpdate(PacketLeafUpdate packet) {
private void onSaplingPacket(PacketSapling packet) {
TileEntity tile = packet.getTarget(Proxies.common.getRenderWorld());
if (tile instanceof TileSapling) {
((TileSapling) tile).fromPacket(packet);
}
}
private void onLeafPacket(PacketLeaf packet) {
TileEntity tile = packet.getTarget(Proxies.common.getRenderWorld());
if (tile instanceof TileLeaves) {
@@ -31,7 +31,6 @@ 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;
@@ -42,7 +41,6 @@ import forestry.api.core.EnumHumidity;
import forestry.api.core.EnumTemperature;
import forestry.api.core.IErrorState;
import forestry.api.genetics.AlleleManager;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IEffectData;
import forestry.api.genetics.IFruitBearer;
import forestry.api.genetics.IFruitFamily;
@@ -52,7 +50,7 @@ import forestry.api.lepidopterology.IButterfly;
import forestry.api.lepidopterology.IButterflyGenome;
import forestry.api.lepidopterology.IButterflyNursery;
import forestry.api.lepidopterology.IButterflyRoot;
import forestry.arboriculture.network.PacketLeafUpdate;
import forestry.arboriculture.network.PacketLeaf;
import forestry.arboriculture.network.PacketRipeningUpdate;
import forestry.core.EnumErrorCode;
import forestry.core.genetics.Allele;
@@ -182,29 +180,6 @@ 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, String fruitAlleleUID) {
ITree tree = getTree();
if (tree != null && tree.getIdent().equals(speciesUID)) {
return;
}
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);
}
setTree(newTree);
}
}
@Override
public void setTree(ITree tree) {
super.setTree(tree);
@@ -353,13 +328,13 @@ public class TileLeaves extends TileTreeContainer implements IPollinatable, IFru
/* NETWORK */
@Override
public Packet getDescriptionPacket() {
return new PacketLeafUpdate(this).getPacket();
return new PacketLeaf(this).getPacket();
}
@Override
public void sendNetworkUpdate() {
PacketLeafUpdate leafUpdate = new PacketLeafUpdate(this);
Proxies.net.sendNetworkPacket(leafUpdate, xCoord, yCoord, zCoord);
PacketLeaf packet = new PacketLeaf(this);
Proxies.net.sendNetworkPacket(packet, xCoord, yCoord, zCoord);
}
private void sendNetworkUpdateRipening() {
@@ -375,16 +350,20 @@ public class TileLeaves extends TileTreeContainer implements IPollinatable, IFru
@Override
public void fromPacket(ForestryPacket packetRaw) {
PacketLeafUpdate packet = (PacketLeafUpdate) packetRaw;
PacketLeaf packet = (PacketLeaf) packetRaw;
isFruitLeaf = packet.isFruitLeaf();
isPollinatedState = packet.isPollinated();
colourFruits = packet.getColourFruits();
String fruitAlleleUID = packet.getFruitAlleleUID();
String speciesUID = packet.getSpeciesUID();
setTree(speciesUID, isPollinatedState, fruitAlleleUID);
ITree tree = getTree();
if (!packet.matchesTree(tree)) {
ITree newTree = packet.getTree();
if (newTree != null) {
setTree(newTree);
}
}
worldObj.func_147479_m(xCoord, yCoord, zCoord);
}
@@ -11,8 +11,13 @@
package forestry.arboriculture.gadgets;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.Packet;
import net.minecraft.world.gen.feature.WorldGenerator;
import forestry.api.arboriculture.ITree;
import forestry.arboriculture.network.PacketSapling;
import forestry.core.network.ForestryPacket;
import forestry.core.proxy.Proxies;
import forestry.plugins.PluginArboriculture;
public class TileSapling extends TileTreeContainer {
@@ -69,4 +74,33 @@ public class TileSapling extends TileTreeContainer {
return 3;
}
@Override
public Packet getDescriptionPacket() {
return new PacketSapling(this).getPacket();
}
@Override
public void sendNetworkUpdate() {
PacketSapling saplingPacket = new PacketSapling(this);
Proxies.net.sendNetworkPacket(saplingPacket, xCoord, yCoord, zCoord);
}
@Override
public void fromPacket(ForestryPacket packetRaw) {
PacketSapling packet = (PacketSapling) packetRaw;
ITree tree = getTree();
if (packet.matchesTree(tree)) {
return;
}
ITree newTree = packet.getTree();
if (newTree == null) {
return;
}
setTree(newTree);
worldObj.func_147479_m(xCoord, yCoord, zCoord);
}
}
@@ -21,11 +21,7 @@ import com.mojang.authlib.GameProfile;
import forestry.api.arboriculture.ITree;
import forestry.arboriculture.genetics.Tree;
import forestry.core.interfaces.IOwnable;
import forestry.core.network.ForestryPacket;
import forestry.core.network.INetworkedEntity;
import forestry.core.network.PacketIds;
import forestry.core.network.PacketTileNBT;
import forestry.core.proxy.Proxies;
import forestry.core.utils.PlayerUtil;
/**
@@ -96,21 +92,7 @@ public abstract class TileTreeContainer extends TileEntity implements INetworked
/* INETWORKEDENTITY */
@Override
public Packet getDescriptionPacket() {
return new PacketTileNBT(PacketIds.TILE_NBT, this).getPacket();
}
@Override
public void sendNetworkUpdate() {
Proxies.net.sendNetworkPacket(new PacketTileNBT(PacketIds.TILE_NBT, this), xCoord, yCoord, zCoord);
}
@Override
public void fromPacket(ForestryPacket packetRaw) {
PacketTileNBT packet = (PacketTileNBT) packetRaw;
this.readFromNBT(packet.getTagCompound());
worldObj.func_147479_m(xCoord, yCoord, zCoord);
}
public abstract Packet getDescriptionPacket();
/* IOWNABLE */
public GameProfile owner = null;
@@ -14,39 +14,30 @@ import java.io.DataInputStream;
import java.io.DataOutputStream;
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.api.genetics.AlleleManager;
import forestry.api.genetics.IAllele;
import forestry.arboriculture.gadgets.TileLeaves;
import forestry.core.network.ForestryPacket;
import forestry.core.network.ILocatedPacket;
import forestry.core.network.PacketIds;
import forestry.plugins.PluginArboriculture;
public class PacketLeafUpdate extends ForestryPacket implements ILocatedPacket {
public class PacketLeaf extends PacketTreeContainer {
private static final short hasFruitFlag = 1;
private static final short isPollinatedFlag = 1 << 1;
private int posX, posY, posZ;
private byte leafState = 0;
private int colourFruits = -1;
private String fruitAlleleUID;
private String speciesUID = "";
public PacketLeafUpdate() {
public PacketLeaf() {
}
public PacketLeafUpdate(TileLeaves leaves) {
super(PacketIds.LEAF_UPDATE);
public PacketLeaf(TileLeaves leaves) {
super(PacketIds.LEAF, leaves);
posX = leaves.getXCoord();
posY = leaves.getYCoord();
posZ = leaves.getZCoord();
leafState = 0;
if (leaves.hasFruit()) {
leafState |= hasFruitFlag;
fruitAlleleUID = leaves.getTree().getGenome().getActiveAllele(EnumTreeChromosome.FRUITS).getUID();
@@ -55,20 +46,12 @@ public class PacketLeafUpdate extends ForestryPacket implements ILocatedPacket {
if (leaves.isPollinated()) {
leafState |= isPollinatedFlag;
}
ITree tree = leaves.getTree();
if (tree != null) {
speciesUID = tree.getIdent();
}
}
@Override
public void writeData(DataOutputStream data) throws IOException {
data.writeShort(posX);
data.writeShort(posY);
data.writeShort(posZ);
super.writeData(data);
data.writeByte(leafState);
data.writeUTF(speciesUID);
if (isFruitLeaf()) {
data.writeUTF(fruitAlleleUID);
@@ -78,11 +61,8 @@ public class PacketLeafUpdate extends ForestryPacket implements ILocatedPacket {
@Override
public void readData(DataInputStream data) throws IOException {
posX = data.readShort();
posY = data.readShort();
posZ = data.readShort();
super.readData(data);
leafState = data.readByte();
speciesUID = data.readUTF();
if (isFruitLeaf()) {
fruitAlleleUID = data.readUTF();
@@ -98,20 +78,28 @@ public class PacketLeafUpdate extends ForestryPacket implements ILocatedPacket {
return (leafState & isPollinatedFlag) > 0;
}
public String getFruitAlleleUID() {
return fruitAlleleUID;
}
public int getColourFruits() {
return colourFruits;
}
public String getSpeciesUID() {
return speciesUID;
}
@Override
public TileEntity getTarget(World world) {
return world.getTileEntity(posX, posY, posZ);
public ITree getTree() {
IAllele[] treeTemplate = PluginArboriculture.treeInterface.getTemplate(speciesUID);
if (treeTemplate == null) {
return null;
}
if (fruitAlleleUID != null) {
IAllele fruitAllele = AlleleManager.alleleRegistry.getAllele(fruitAlleleUID);
if (fruitAllele != null) {
treeTemplate[EnumTreeChromosome.FRUITS.ordinal()] = fruitAllele;
}
}
ITree tree = PluginArboriculture.treeInterface.templateAsIndividual(treeTemplate);
if (isPollinated()) {
tree.mate(tree);
}
return tree;
}
}
@@ -0,0 +1,16 @@
package forestry.arboriculture.network;
import forestry.arboriculture.gadgets.TileSapling;
import forestry.core.network.PacketIds;
public class PacketSapling extends PacketTreeContainer {
public PacketSapling() {
}
public PacketSapling(TileSapling sapling) {
super(PacketIds.SAPLING, sapling);
}
}
@@ -0,0 +1,75 @@
package forestry.arboriculture.network;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import forestry.api.arboriculture.ITree;
import forestry.api.genetics.IAllele;
import forestry.arboriculture.gadgets.TileTreeContainer;
import forestry.core.network.ForestryPacket;
import forestry.core.network.ILocatedPacket;
import forestry.plugins.PluginArboriculture;
public class PacketTreeContainer extends ForestryPacket implements ILocatedPacket {
private int posX, posY, posZ;
protected String speciesUID = "";
public PacketTreeContainer() {
}
public PacketTreeContainer(int id, TileTreeContainer treeContainer) {
super(id);
posX = treeContainer.xCoord;
posY = treeContainer.yCoord;
posZ = treeContainer.zCoord;
ITree tree = treeContainer.getTree();
if (tree != null) {
speciesUID = tree.getIdent();
}
}
@Override
public void writeData(DataOutputStream data) throws IOException {
data.writeShort(posX);
data.writeShort(posY);
data.writeShort(posZ);
data.writeUTF(speciesUID);
}
@Override
public void readData(DataInputStream data) throws IOException {
posX = data.readShort();
posY = data.readShort();
posZ = data.readShort();
speciesUID = data.readUTF();
}
@Override
public TileEntity getTarget(World world) {
return world.getTileEntity(posX, posY, posZ);
}
public boolean matchesTree(ITree tree) {
if (tree == null) {
return speciesUID.isEmpty();
} else {
return tree.getIdent().equals(speciesUID);
}
}
public ITree getTree() {
IAllele[] treeTemplate = PluginArboriculture.treeInterface.getTemplate(speciesUID);
if (treeTemplate != null) {
return PluginArboriculture.treeInterface.templateAsIndividual(treeTemplate);
}
return null;
}
}
@@ -46,7 +46,8 @@ public class PacketIds {
public static final int POBOX_INFO = 85;
public static final int POBOX_INFO_REQUEST = 86;
public static final int LEAF_UPDATE = 90;
public static final int SAPLING = 89;
public static final int LEAF = 90;
public static final int RIPENING_UPDATE = 91;
public static final int GUI_INTEGER = 92;