package de.take_weiland.mods.commons.meta; import com.google.common.collect.ContiguousSet; import com.google.common.collect.DiscreteDomain; import com.google.common.collect.Range; import net.minecraft.item.ItemStack; import net.minecraft.world.World; import java.util.Set; /** * @author diesieben07 */ class IntPropertyImpl extends GenericProperty<Integer> implements IntProperty { private final int shift; private final int mask; private final Set<Integer> values; IntPropertyImpl(int shift, int bits) { this.shift = shift; this.mask = (1 << bits) - 1; values = ContiguousSet.create(Range.closedOpen(0, 1 << bits), DiscreteDomain.integers()); } @Override public int intValue(int metadata) { return (metadata >> shift) & mask; } @Override public int intValue(World world, int x, int y, int z) { return intValue(world.getBlockMetadata(x, y, z)); } @Override public int intValue(ItemStack stack) { return intValue(stack.getItemDamage()); } @Override public int toMeta(int value, int previousMeta) { return previousMeta | ((value & mask) << shift); } @Override public ItemStack apply(int value, ItemStack stack) { stack.setItemDamage(toMeta(value, stack.getItemDamage())); return stack; } @Override public void apply(int value, World world, int x, int y, int z) { world.setBlockMetadataWithNotify(x, y, z, toMeta(value, world.getBlockMetadata(x, y, z)), 3); } @Override public void apply(int value, World world, int x, int y, int z, int notifyFlags) { world.setBlockMetadataWithNotify(x, y, z, toMeta(value, world.getBlockMetadata(x, y, z)), notifyFlags); } @Override public Integer value(int metadata) { return intValue(metadata); } @Override public int toMeta(Integer value, int previousMeta) { return toMeta(value.intValue(), previousMeta); } @Override public Set<Integer> values() { return values; } @Override public boolean hasDistinctValues() { return false; } }