package mcjty.rftools.blocks.teleporter; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import mcjty.lib.api.Infusable; import mcjty.lib.container.EmptyContainer; import mcjty.lib.varia.Coordinate; import mcjty.rftools.RFTools; import mcjty.rftools.blocks.GenericRFToolsBlock; import mcjty.rftools.dimension.network.PacketGetDestinationInfo; import mcjty.rftools.dimension.network.ReturnDestinationInfoHelper; import mcjty.rftools.network.RFToolsMessages; import mcp.mobius.waila.api.IWailaConfigHandler; import mcp.mobius.waila.api.IWailaDataAccessor; import net.minecraft.block.material.Material; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import org.lwjgl.input.Keyboard; import java.util.List; public class MatterTransmitterBlock extends GenericRFToolsBlock implements Infusable { private IIcon iconTop; public MatterTransmitterBlock() { super(Material.iron, MatterTransmitterTileEntity.class, true); setBlockName("matterTransmitterBlock"); setCreativeTab(RFTools.tabRfTools); } @SideOnly(Side.CLIENT) @Override public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean whatIsThis) { super.addInformation(itemStack, player, list, whatIsThis); NBTTagCompound tagCompound = itemStack.getTagCompound(); if (tagCompound != null) { String name = tagCompound.getString("tpName"); list.add(EnumChatFormatting.GREEN + "Name: " + name); boolean dialed = false; Coordinate c = Coordinate.readFromNBT(tagCompound, "dest"); if (c != null && c.getY() >= 0) { dialed = true; } else if (tagCompound.hasKey("destId")) { if (tagCompound.getInteger("destId") != -1) { dialed = true; } } if (dialed) { int destId = tagCompound.getInteger("destId"); if (System.currentTimeMillis() - lastTime > 500) { lastTime = System.currentTimeMillis(); RFToolsMessages.INSTANCE.sendToServer(new PacketGetDestinationInfo(destId)); } String destname = "?"; if (ReturnDestinationInfoHelper.id != null && ReturnDestinationInfoHelper.id == destId) { destname = ReturnDestinationInfoHelper.name; } list.add(EnumChatFormatting.YELLOW + "[DIALED to " + destname + "]"); } boolean once = tagCompound.getBoolean("once"); if (once) { list.add(EnumChatFormatting.YELLOW + "[ONCE]"); } } if (Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT)) { list.add(EnumChatFormatting.WHITE + "If you place this block near a Dialing Device then"); list.add(EnumChatFormatting.WHITE + "you can dial it to a Matter Receiver. Make sure to give"); list.add(EnumChatFormatting.WHITE + "it sufficient power!"); list.add(EnumChatFormatting.WHITE + "Use a Destination Analyzer adjacent to this block"); list.add(EnumChatFormatting.WHITE + "to check destination status (red is bad, green ok,"); list.add(EnumChatFormatting.WHITE + "yellow is unknown)."); list.add(EnumChatFormatting.WHITE + "Use a Matter Booster adjacent to this block"); list.add(EnumChatFormatting.WHITE + "to be able to teleport to unpowered receivers."); list.add(EnumChatFormatting.YELLOW + "Infusing bonus: reduced power consumption and"); list.add(EnumChatFormatting.YELLOW + "increased teleportation speed."); } else { list.add(EnumChatFormatting.WHITE + RFTools.SHIFT_MESSAGE); } } private static long lastTime = 0; @SideOnly(Side.CLIENT) @Override public List<String> getWailaBody(ItemStack itemStack, List<String> currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config) { super.getWailaBody(itemStack, currenttip, accessor, config); TileEntity te = accessor.getTileEntity(); if (te instanceof MatterTransmitterTileEntity) { MatterTransmitterTileEntity matterTransmitterTileEntity = (MatterTransmitterTileEntity) te; currenttip.add(EnumChatFormatting.GREEN + "Name: " + matterTransmitterTileEntity.getName()); if (matterTransmitterTileEntity.isDialed()) { if (System.currentTimeMillis() - lastTime > 500) { lastTime = System.currentTimeMillis(); RFToolsMessages.INSTANCE.sendToServer(new PacketGetDestinationInfo(matterTransmitterTileEntity.getTeleportId())); } String name = "?"; if (ReturnDestinationInfoHelper.id != null && ReturnDestinationInfoHelper.id == matterTransmitterTileEntity.getTeleportId()) { name = ReturnDestinationInfoHelper.name; } currenttip.add(EnumChatFormatting.YELLOW + "[DIALED to " + name + "]"); } if (matterTransmitterTileEntity.isOnce()) { currenttip.add(EnumChatFormatting.YELLOW + "[ONCE]"); } } return currenttip; } @Override public int getGuiID() { return RFTools.GUI_MATTER_TRANSMITTER; } @Override @SideOnly(Side.CLIENT) public GuiContainer createClientGui(EntityPlayer entityPlayer, TileEntity tileEntity) { MatterTransmitterTileEntity matterTransmitterTileEntity = (MatterTransmitterTileEntity) tileEntity; EmptyContainer matterTransmitterContainer = new EmptyContainer(entityPlayer); return new GuiMatterTransmitter(matterTransmitterTileEntity, matterTransmitterContainer); } @Override public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entityLivingBase, ItemStack itemStack) { // We don't want what GenericBlock does. restoreBlockFromNBT(world, x, y, z, itemStack); setOwner(world, x, y, z, entityLivingBase); } @Override public void registerBlockIcons(IIconRegister iconRegister) { iconTop = iconRegister.registerIcon(RFTools.MODID + ":" + "machineTransmitter"); iconSide = iconRegister.registerIcon(RFTools.MODID + ":" + "machineSide"); iconBottom = iconRegister.registerIcon(RFTools.MODID + ":" + "machineBottom"); } @Override public IIcon getIcon(IBlockAccess blockAccess, int x, int y, int z, int side) { if (side == ForgeDirection.UP.ordinal()) { return iconTop; } else if (side == ForgeDirection.DOWN.ordinal()) { return iconBottom; } else { return iconSide; } } @Override public IIcon getIcon(int side, int meta) { if (side == ForgeDirection.UP.ordinal()) { return iconTop; } else if (side == ForgeDirection.DOWN.ordinal()) { return iconBottom; } else { return iconSide; } } }