package openblocks.common.tileentity; import java.util.List; import java.util.Set; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import openblocks.OpenBlocks.Blocks; import openmods.api.IActivateAwareTile; import openmods.api.ICustomHarvestDrops; import openmods.api.ICustomPickItem; import openmods.api.IPlacerAwareTile; import openmods.sync.SyncableEnum; import openmods.tileentity.SyncedTileEntity; import openmods.utils.CollectionUtils; import openmods.utils.ColorUtils; import openmods.utils.ColorUtils.ColorMeta; public class TileEntityElevatorRotating extends SyncedTileEntity implements IPlacerAwareTile, IActivateAwareTile, ICustomHarvestDrops, ICustomPickItem { private SyncableEnum<ColorUtils.ColorMeta> color; public TileEntityElevatorRotating() { syncMap.addUpdateListener(createRenderUpdateListener()); } @Override protected void createSyncedFields() { this.color = new SyncableEnum<ColorUtils.ColorMeta>(ColorUtils.ColorMeta.BLACK); } public ColorMeta getColor() { return color.get(); } public void setColor(ColorMeta next) { color.set(next); sync(); } @Override public boolean canUpdate() { return false; } @Override public boolean suppressNormalHarvestDrops() { return true; } @Override public void addHarvestDrops(EntityPlayer player, List<ItemStack> drops) { drops.add(createStack()); } @Override public ItemStack getPickBlock() { return createStack(); } private ItemStack createStack() { final int colorMeta = color.get().vanillaBlockId; return new ItemStack(Blocks.elevatorRotating, 1, colorMeta); } @Override public boolean onBlockActivated(EntityPlayer player, int side, float hitX, float hitY, float hitZ) { if (worldObj.isRemote) return false; ItemStack stack = player.getHeldItem(); if (stack != null) { Set<ColorMeta> metas = ColorUtils.stackToColor(stack); if (!metas.isEmpty()) { ColorMeta meta = CollectionUtils.getRandom(metas); color.set(meta); sync(); return true; } } return false; } @Override public void onBlockPlacedBy(EntityLivingBase placer, ItemStack stack) { ColorMeta colorMeta = ColorUtils.vanillaBlockToColor(stack.getItemDamage()); color.set(colorMeta); } }