@Override
    public IMessage onMessage(StringPacket message, MessageContext ctx) {
      World world = DimensionManager.getWorld(message.targetPos[0]);

      if (message.targetType == Syncer.TargetType.Entity) {
        Entity target = world.getEntityByID(message.targetPos[1]);
        IStringSyncer is = (IStringSyncer) target;
        is.setStringData(message.data);
      } else if (message.targetType == Syncer.TargetType.TileEntity) {
        TileEntity target =
            world.getTileEntity(
                new BlockPos(message.targetPos[1], message.targetPos[2], message.targetPos[3]));
        IStringSyncer is = (IStringSyncer) target;
        is.setStringData(message.data);
      }

      return null;
    }
    @Override
    @SideOnly(Side.CLIENT)
    public IMessage onMessage(StringPacket message, MessageContext ctx) {
      World world = Minecraft.getMinecraft().theWorld;
      if (world.provider.getDimension() != message.targetPos[0]) return null;

      if (message.targetType == Syncer.TargetType.Entity) {
        Entity target = world.getEntityByID(message.targetPos[1]);
        IStringSyncer is = (IStringSyncer) target;
        is.setStringData(message.data);
      } else if (message.targetType == Syncer.TargetType.TileEntity) {
        TileEntity target =
            world.getTileEntity(
                new BlockPos(message.targetPos[1], message.targetPos[2], message.targetPos[3]));
        IStringSyncer is = (IStringSyncer) target;
        is.setStringData(message.data);
      }

      return null;
    }