001package net.minecraft.world;
002
003public class NextTickListEntry implements Comparable
004{
005    /** The id number for the next tick entry */
006    private static long nextTickEntryID = 0L;
007
008    /** X position this tick is occuring at */
009    public int xCoord;
010
011    /** Y position this tick is occuring at */
012    public int yCoord;
013
014    /** Z position this tick is occuring at */
015    public int zCoord;
016
017    /**
018     * blockID of the scheduled tick (ensures when the tick occurs its still for this block)
019     */
020    public int blockID;
021
022    /** Time this tick is scheduled to occur at */
023    public long scheduledTime;
024    public int field_82754_f;
025
026    /** The id of the tick entry */
027    private long tickEntryID;
028
029    public NextTickListEntry(int par1, int par2, int par3, int par4)
030    {
031        this.tickEntryID = (long)(nextTickEntryID++);
032        this.xCoord = par1;
033        this.yCoord = par2;
034        this.zCoord = par3;
035        this.blockID = par4;
036    }
037
038    public boolean equals(Object par1Obj)
039    {
040        if (!(par1Obj instanceof NextTickListEntry))
041        {
042            return false;
043        }
044        else
045        {
046            NextTickListEntry var2 = (NextTickListEntry)par1Obj;
047            return this.xCoord == var2.xCoord && this.yCoord == var2.yCoord && this.zCoord == var2.zCoord && this.blockID == var2.blockID;
048        }
049    }
050
051    public int hashCode()
052    {
053        return (this.xCoord * 1024 * 1024 + this.zCoord * 1024 + this.yCoord) * 256 + this.blockID;
054    }
055
056    /**
057     * Sets the scheduled time for this tick entry
058     */
059    public NextTickListEntry setScheduledTime(long par1)
060    {
061        this.scheduledTime = par1;
062        return this;
063    }
064
065    public void func_82753_a(int par1)
066    {
067        this.field_82754_f = par1;
068    }
069
070    /**
071     * Compares this tick entry to another tick entry for sorting purposes. Compared first based on the scheduled time
072     * and second based on tickEntryID.
073     */
074    public int comparer(NextTickListEntry par1NextTickListEntry)
075    {
076        return this.scheduledTime < par1NextTickListEntry.scheduledTime ? -1 : (this.scheduledTime > par1NextTickListEntry.scheduledTime ? 1 : (this.field_82754_f != par1NextTickListEntry.field_82754_f ? this.field_82754_f - par1NextTickListEntry.field_82754_f : (this.tickEntryID < par1NextTickListEntry.tickEntryID ? -1 : (this.tickEntryID > par1NextTickListEntry.tickEntryID ? 1 : 0))));
077    }
078
079    public int compareTo(Object par1Obj)
080    {
081        return this.comparer((NextTickListEntry)par1Obj);
082    }
083}