1e20086799
* Extracts item comparison from Platform into their own helper. Renamed methods to be more more fitting for the actual comparison. Added documentation about each methods behaviour.
224 lines
4.6 KiB
Java
224 lines
4.6 KiB
Java
/*
|
|
* This file is part of Applied Energistics 2.
|
|
* Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved.
|
|
*
|
|
* Applied Energistics 2 is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Lesser General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* Applied Energistics 2 is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
|
|
*/
|
|
|
|
package appeng.util.item;
|
|
|
|
|
|
import java.util.List;
|
|
|
|
import net.minecraft.init.Items;
|
|
import net.minecraft.item.Item;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.util.ResourceLocation;
|
|
import net.minecraftforge.fml.relauncher.Side;
|
|
import net.minecraftforge.fml.relauncher.SideOnly;
|
|
|
|
import appeng.util.Platform;
|
|
|
|
|
|
public class AEItemDef
|
|
{
|
|
|
|
static final AESharedNBT LOW_TAG = new AESharedNBT( Integer.MIN_VALUE );
|
|
static final AESharedNBT HIGH_TAG = new AESharedNBT( Integer.MAX_VALUE );
|
|
|
|
private final int itemID;
|
|
private final Item item;
|
|
private int myHash;
|
|
private int def;
|
|
private int damageValue;
|
|
private int displayDamage;
|
|
private int maxDamage;
|
|
private AESharedNBT tagCompound;
|
|
@SideOnly( Side.CLIENT )
|
|
private String displayName;
|
|
@SideOnly( Side.CLIENT )
|
|
private List tooltip;
|
|
@SideOnly( Side.CLIENT )
|
|
private ResourceLocation uniqueID;
|
|
private OreReference isOre;
|
|
|
|
public AEItemDef( final Item it )
|
|
{
|
|
this.item = it;
|
|
this.itemID = Item.getIdFromItem( it );
|
|
}
|
|
|
|
AEItemDef copy()
|
|
{
|
|
final AEItemDef t = new AEItemDef( this.getItem() );
|
|
t.def = this.def;
|
|
t.setDamageValue( this.getDamageValue() );
|
|
t.setDisplayDamage( this.getDisplayDamage() );
|
|
t.setMaxDamage( this.getMaxDamage() );
|
|
t.setTagCompound( this.getTagCompound() );
|
|
t.setIsOre( this.getIsOre() );
|
|
return t;
|
|
}
|
|
|
|
@Override
|
|
public boolean equals( final Object obj )
|
|
{
|
|
if( obj == null )
|
|
{
|
|
return false;
|
|
}
|
|
if( this.getClass() != obj.getClass() )
|
|
{
|
|
return false;
|
|
}
|
|
final AEItemDef other = (AEItemDef) obj;
|
|
return other.getDamageValue() == this.getDamageValue() && other.getItem() == this.getItem() && this.getTagCompound() == other.getTagCompound();
|
|
}
|
|
|
|
boolean isItem( final ItemStack otherStack )
|
|
{
|
|
// hackery!
|
|
final int dmg = this.getDamageValueHack( otherStack );
|
|
|
|
if( this.getItem() == otherStack.getItem() && dmg == this.getDamageValue() )
|
|
{
|
|
if( ( this.getTagCompound() != null ) == otherStack.hasTagCompound() )
|
|
{
|
|
return true;
|
|
}
|
|
|
|
if( this.getTagCompound() != null && otherStack.hasTagCompound() )
|
|
{
|
|
return Platform.itemComparisons().isNbtTagEqual( this.getTagCompound(), otherStack.getTagCompound() );
|
|
}
|
|
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
int getDamageValueHack( final ItemStack is )
|
|
{
|
|
return Items.BLAZE_ROD.getDamage( is );
|
|
}
|
|
|
|
void reHash()
|
|
{
|
|
this.def = this.getItemID() << Platform.DEF_OFFSET | this.getDamageValue();
|
|
this.myHash = this.def ^ ( this.getTagCompound() == null ? 0 : System.identityHashCode( this.getTagCompound() ) );
|
|
}
|
|
|
|
AESharedNBT getTagCompound()
|
|
{
|
|
return this.tagCompound;
|
|
}
|
|
|
|
void setTagCompound( final AESharedNBT tagCompound )
|
|
{
|
|
this.tagCompound = tagCompound;
|
|
}
|
|
|
|
int getDamageValue()
|
|
{
|
|
return this.damageValue;
|
|
}
|
|
|
|
int setDamageValue( final int damageValue )
|
|
{
|
|
this.damageValue = damageValue;
|
|
return damageValue;
|
|
}
|
|
|
|
Item getItem()
|
|
{
|
|
return this.item;
|
|
}
|
|
|
|
int getDisplayDamage()
|
|
{
|
|
return this.displayDamage;
|
|
}
|
|
|
|
void setDisplayDamage( final int displayDamage )
|
|
{
|
|
this.displayDamage = displayDamage;
|
|
}
|
|
|
|
String getDisplayName()
|
|
{
|
|
return this.displayName;
|
|
}
|
|
|
|
void setDisplayName( final String displayName )
|
|
{
|
|
this.displayName = displayName;
|
|
}
|
|
|
|
List getTooltip()
|
|
{
|
|
return this.tooltip;
|
|
}
|
|
|
|
List setTooltip( final List tooltip )
|
|
{
|
|
this.tooltip = tooltip;
|
|
return tooltip;
|
|
}
|
|
|
|
ResourceLocation getUniqueID()
|
|
{
|
|
return this.uniqueID;
|
|
}
|
|
|
|
ResourceLocation setUniqueID( final ResourceLocation uniqueID )
|
|
{
|
|
this.uniqueID = uniqueID;
|
|
return uniqueID;
|
|
}
|
|
|
|
OreReference getIsOre()
|
|
{
|
|
return this.isOre;
|
|
}
|
|
|
|
void setIsOre( final OreReference isOre )
|
|
{
|
|
this.isOre = isOre;
|
|
}
|
|
|
|
int getItemID()
|
|
{
|
|
return this.itemID;
|
|
}
|
|
|
|
int getMaxDamage()
|
|
{
|
|
return this.maxDamage;
|
|
}
|
|
|
|
void setMaxDamage( final int maxDamage )
|
|
{
|
|
this.maxDamage = maxDamage;
|
|
}
|
|
|
|
/**
|
|
* TODO: Check if replaceable by hashCode();
|
|
*/
|
|
int getMyHash()
|
|
{
|
|
return this.myHash;
|
|
}
|
|
|
|
}
|