mirror of
https://github.com/GTNewHorizons/ForestryMC.git
synced 2026-11-14 01:04:12 +00:00
#561 Use less network data for saplings
This commit is contained in:
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;
|
||||
|
||||
Executable → Regular
+29
-41
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user