package com.jaquadro.minecraft.storagedrawers.block.modeldata; import com.jaquadro.minecraft.chameleon.model.ModelData; import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawer; import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.LockAttribute; import com.jaquadro.minecraft.storagedrawers.block.tile.TileEntityDrawers; import java.util.Arrays; import java.util.UUID; public final class DrawerStateModelData extends ModelData { private final boolean shroudedFlag; private final boolean lockedFlag; private final boolean voidFlag; private final UUID owner; private final boolean[] emptyFlags; public DrawerStateModelData (TileEntityDrawers tile) { if (tile != null) { shroudedFlag = tile.isShrouded(); lockedFlag = tile.isItemLocked(LockAttribute.LOCK_POPULATED); voidFlag = tile.isVoid(); owner = tile.getOwner(); emptyFlags = new boolean[tile.getDrawerCount()]; for (int i = 0; i < emptyFlags.length; i++) { IDrawer drawer = tile.getDrawer(i); emptyFlags[i] = (drawer == null) || drawer.isEmpty(); } } else { shroudedFlag = false; lockedFlag = false; voidFlag = false; owner = null; emptyFlags = new boolean[0]; } } public boolean isShrouded () { return shroudedFlag; } public boolean isItemLocked () { return lockedFlag; } public boolean isVoid () { return voidFlag; } public UUID getOwner () { return owner; } public int getDrawerCount () { return emptyFlags.length; } public boolean isDrawerEmpty (int slot) { return slot < 0 || slot >= emptyFlags.length || emptyFlags[slot]; } @Override public boolean equals (Object obj) { if (obj == null || obj.getClass() != this.getClass()) return false; DrawerStateModelData other = (DrawerStateModelData)obj; if (shroudedFlag != other.shroudedFlag || lockedFlag != other.lockedFlag || voidFlag != other.voidFlag) return false; if (owner != null && !owner.equals(other.owner) || owner == null && other.owner != null) return false; return Arrays.equals(emptyFlags, other.emptyFlags); } @Override public int hashCode () { int c = shroudedFlag ? 1 : 0; c = 37 * c + (lockedFlag ? 1 : 0); c = 37 * c + (voidFlag ? 1 : 0); c = 37 * c + (owner != null ? owner.hashCode() : 0); for (boolean emptyFlag : emptyFlags) c = 37 * c + (emptyFlag ? 1 : 0); return c; } }