package de.take_weiland.mods.commons.meta; import com.google.common.collect.Maps; import net.minecraft.item.ItemStack; import net.minecraft.world.World; import java.util.Map; /** * @author diesieben07 */ abstract class GenericProperty<T> implements MetadataProperty<T> { @Override public final T value(ItemStack stack) { return value(stack.getItemDamage()); } @Override public final T value(World world, int x, int y, int z) { return value(world.getBlockMetadata(x, y, z)); } @Override public ItemStack apply(T value, ItemStack stack) { stack.setItemDamage(toMeta(value, stack.getItemDamage())); return stack; } @Override public void apply(T 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(T 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 <V> Map<T, V> createMap() { if (hasDistinctValues()) { return Maps.newHashMapWithExpectedSize(values().size()); } else { return Maps.newHashMap(); } } }