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